一.主要的过程:(简单版)
1、定义阶段(读取到配置文件后就会创建) --> 2、初始化阶段–> 3、调用阶段(getBean()) --> 4、销毁阶段: ApplicationContext销毁时
(1)bean创建
在配置文件里面用<bean></bean>来进行定义,
或者注解进行定义。例:UserDaoImpl.java中
@Repository("userDao") 创建名字为userDao的bean
(2)bean初始化(赋值)
有两种方式初始化:
- A.在配置文件中通过指定init-method属性来完成
在Bean的类中实现一个初始化Bean属性的方法,如init(),如:
public class HelloWorld{
public String msg=null;
public Date date=null;
public void init() {
msg=”HelloWorld”;
date=new Date();
}
……
}
然后,在配置文件中设置init-mothod属性:
```
-
B.实现org.springframwork.beans.factory.InitializingBean接口
Bean实现InitializingBean接口,并且增加 afterPropertiesSet() 方法:
public class HelloWorld implement InitializingBean {
public String msg=null;
public Date date=null;public void afterPropertiesSet() {
msg=”向全世界问好!”;
date=new Date();
}
……
}
那么,当这个Bean的所有属性被Spring的BeanFactory设置完后,会自动调用afterPropertiesSet()方法对 Bean进行初始化,于是,配置文件就不用指定 init-method属性了。
(3)bean调用
有三种方式可以得到bean实例,并进行调用
- 1、使用BeanWrapper
HelloWorld hw=new HelloWorld();
BeanWrapper bw=new BeanWrapperImpl(hw);
bw.setPropertyvalue(”msg”,”HelloWorld”);
system.out.println(bw.getPropertyCalue(”msg”));
- 2、使用BeanFactory
InputStream is=new FileInputStream(”config.xml”);
XmlBeanFactory factory=new XmlBeanFactory(is);
HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”);
system.out.println(hw.getMsg());
- 3、使用ApplicationContext (常用)
ApplicationContext ac = new ClassPathXmlApplicationContext("config.xml");
HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”);
System.out.println(hw.getMsg());
(4)bean销毁
销毁有两种方式
- A.使用配置文件指定的destroy-method属性
与初始化属性 init-methods类似,在Bean的类中实现一个撤销Bean的方法,然后在配置文件中通过 destory-method指定,那么当bean销毁时,Spring将自动调用指定的销毁方法。 - B.实现org.springframwork.bean.factory.DisposeableBean接口
如果实现了DisposebleBean接口,那么Spring将自动调用bean中的Destory方法进行销毁,所以,Bean中必须提供 Destory方法。
二.完整版:
- 1.实例化bean对象(通过构造方法或者工厂方法)
- 2.设置对象属性(setter等)(依赖注入)
- 3.如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。(和下面的一条均属于检查Aware接口)
- 4.如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身
- 5.将Bean实例传递给Bean的前置处理器的postProcessBeforeInitialization(Object bean, String beanname)方法
- 6.调用Bean的初始化方法
- 7.将Bean实例传递给Bean的后置处理器的postProcessAfterInitialization(Object bean, String beanname)方法
- 8.使用Bean
- 9.容器关闭之前,调用Bean的销毁方法
测试:
package com.linjie.cycle;
import org.springframework.beans.factory.BeanNameAware;
/**
* @author cuichen
* @Description:一个学生类(Bean),能体现其生命周期的Bean
*/
public class Student implements BeanNameAware {
private String name;
//无参构造方法
public Student() {
super();
}
/** 设置对象属性
* @param name the name to set
*/
public void setName(String name) {
System.out.println("设置对象属性setName()..");
this.name = name;
}
//Bean的初始化方法
public void initStudent() {
System.out.println("Student这个Bean:初始化");
}
//Bean的销毁方法
public void destroyStudent() {
System.out.println("Student这个Bean:销毁");
}
//Bean的使用
public void play() {
System.out.println("Student这个Bean:使用");
}
/* 重写toString
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Student [name = " + name + "]";
}
//调用BeanNameAware的setBeanName()
//传递Bean的ID。
@Override
public void setBeanName(String name) {
System.out.println("调用BeanNameAware的setBeanName()..." );
}
}
结果:

1056

被折叠的 条评论
为什么被折叠?



