Spring中Bean的生命周期
在Spring中,Bean默认为单例模式,即singleton属性默认为true,从BeanFactory中取得的Bean实例为在其初始化就产生一个新的对象,而不是每次获取的时候都产出一个新的对象。当然我们也可以在初始化Bean的时候设置其singleton属性为false,使这个Bean变成多例模式,在getBean的时候,Spring都会产出一个新的对象,类似于Java的中的new Object操作。但设置其为多例,应避免多线程同时存取共享资源所引发的数据不同步问题。
在Spring中,一个Bean从创建到销毁,大致需要经历如下几个步骤:
1.实例化Bean,根据Spring配置,执行包扫描操作,并对其进行实例化操作。
2.根据Spring上下文对实例化的Bean进行配置,其中包括依赖注入。
3.判断是否实现了BeanNameAware接口,如果有会执行setBeanName方法去设置这个Bean的id,即自己设置Bean在BeanFactory中的名字。
4.判断是否实现了BeanFactoryAware接口,如果有则执行setBeanFactory方法,使得Bean可以获取自己的工厂,从而可以使用工厂的getBean方法。
5.判断是否实现了ApplicationContextAware接口,如果有则执行setApplicationContext方法,使得在Bean中可以获取Spring上下文,从而可以获取通过上下文去getBean,该步骤与上一步作用大致相同,但通过该中方式能实现的功能却更加丰富。
6.判断是否实现了BeanPostProcessor接口,如果有则调用postProcessBeforeInitialization方法,这一步属于实例化Bean的前置操作,在经过该步骤后,即Bean实例化后同样也会执行一个操作,详情见第八条。
7.判断Bean是否配置了init-method,如果有,在Bean初始化之后会默认执行一次init-method指定的方法。
8.判断Bean是否实现了BeanPostProcessor接口,如果有则调用postProcessAfterInitialization方法,该方法属于Bean实例化后的操作。在经过这个步骤后,Bean的初始化操作就完成了。
9.当Bean实例化完成后,当Bean不再被需要的时候会执行销毁操作。一般是在ApplicationContext执行close方法时会进行销毁操作。
10.在销毁过程中,判断是否实现了DisposableBean接口,如果有则执行destroy方法。
11.判断Bean是否配置了destroy-method,如果有,在销毁过程中会默认执行一次destroy-method方法。
还没有评论,来说两句吧...