spring中bean的生命周期
1、spring中bean的生命周期(1)概念在spring框架中,所有的bean对象都有生命周期,就是指bean的创建、初始化、服务、销毁的一个过程。(2)bean的生命周期bean的定义在spring中通常是通过配置文档的方式来定义Bean的,在一个配置文件中可以定义多个Beanbean的初始化默认在IOC容器加载的时候实例化对象(ApplicationContext是,Beanfactory
1、spring中bean的生命周期
(1)概念
在spring框架中,所有的bean对象都有生命周期,就是指bean的创建、初始化、服务、销毁的一个过程。
(2)bean的生命周期
- bean的定义
在spring中通常是通过配置文档的方式来定义Bean的,在一个配置文件中可以定义多个Bean
- bean的初始化
默认在IOC容器加载的时候实例化对象(ApplicationContext是,Beanfactory只有在调用getBean的时候才进行实例化):生命周期(初始化、销毁方法、BeanPostProcessor后处理Bean) - 怀梦想,致远方 - 博客园
- bean的使用
通过ApplicationContext对象或Beanfactory对象获取bean
- 销毁
(3)代码的方式演示Bean的生命周期
创建Student类:
public class Student implements BeanNameAware { private String sname; @Override public String toString() { return "Student{" + "sname='" + sname + '\'' + '}'; } public Student() { System.out.println("bean创建了"); } public void setSname(String sname) { System.out.println("设置对象属性setName().."); this.sname = sname; } //Bean的初始化方法 public void initStudent() { System.out.println("初始化Bean"); } //实现BeanNameAware接口的setBeanName(),传递Bean的ID。 @Override public void setBeanName(String sname) { System.out.println("调用BeanNameAware的setBeanSname,返回的ID值是:" +sname); } //Bean的使用 public void use() { System.out.println("使用Bean"); } //Bean的销毁方法 public void destroyStudent() { System.out.println("销毁Bean"); } }
其中调用接口后要实现接口的setBeanName方法,该方法的作用是返回bean的ID值
再创建一个类,书写Bean后置处理器相关的方法:
public class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { System.out.println("前方法"+s); return o; } @Override public Object postProcessAfterInitialization(Object o, String s) throws BeansException { System.out.println("后方法"+s); return o; } }
spring的配置文件:
<bean name="student" class="com.zhb.bean.Student" init-method="initStudent" destroy-method="destroyStudent"> </bean> <bean class="com.zhb.test.MyBeanPostProcessor"></bean>
第二个是配置后处理器的bean,只需要配置类全名,不需要配置ID等,spring可以自动识别并注入。
测试结果:
2、总结
-
Bean 容器找到配置文件中 Spring Bean 的定义(配置文件或注解的方式定义)
-
Bean 容器利用Java Reflection API创建一个Bean的实例(ApplicationContext或Beanfactory)
-
如果涉及到一些属性值,利用set()方法设置一些属性值。
-
如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的ID
-
如果 Bean 实现了`BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入 ClassLoader对象的实例。
-
类似的,如果实现了其他 *.Aware接口,就调用相应的方法。
-
如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization() 方法
-
如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。
-
如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
-
如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessAfterInitialization()方法
-
当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。
-
当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。
更多推荐
所有评论(0)