在Spring中,通过BeanFactory或者ApplicationContext获取实例化的bean,它默认是单例的(Singleton),Singleton默认值为true,如果想获取这个bean为多例的话,则将Singleton设置为false.
一、通过BeanFactory实例化的bean的生命周期
1)bean实例化
1.Bean的建立:
容器找到这个bean并对其进行初始化。
2.属性注入:
使用依赖注入,容器根据bean的定义信息配置bean的属性。
3.BeanNameAware的setBeanName():
如果Bean有实现BeanNameAware接口,则工厂调用setBeanNameA()方法传递Bean的ID。
4.BeanFactoryAware的setBeanFactory():
如果Bean有实现BeanFactoryAware接口,工厂调用setBeanFactory()方法传递工厂本身。
5.BeanPostProcessor的postProcessorBeforeInitialization():
如果有BeanPostProcessor和Bean关联,则其postProcessorBeforeInitialization()将被调用。
6.InitializingBean的afterPropertiesBean():
如果bean类实现了InitializingBean的接口,则调用afterPropertiesBean()方法。
7.Bean定义文件中定义init-method方法:
如果配置文件中定义了bean的init-method,则调用那个initBean()方法。
8.BeanPostProcessor的postProcessorAfterInitialization():
如果有BeanPostProcessor和Bean关联,则其postProcessorAfterInitialization()将被调用。此时bean已经实例化完毕。
2)bean销毁
1.DisposiableBean的destroy()方法
如果bean实现了DisposableBean的接口,则调用destroy()方法进行销毁。
2.Bean的配置文件中定义了destroy-method:
如果Bean的配置文件中定义了destroy-method,则执行指定的destroy()方法。
二、通过ApplicationContext实例化的bean的生命周期
在创建bean的过程中稍有不同,在BeanFactoryAware的setBeanFactory()方法之后,调用setApplicationContext()方法,然后执行一下方法。
一、通过BeanFactory实例化的bean的生命周期
1)bean实例化
1.Bean的建立:
容器找到这个bean并对其进行初始化。
2.属性注入:
使用依赖注入,容器根据bean的定义信息配置bean的属性。
3.BeanNameAware的setBeanName():
如果Bean有实现BeanNameAware接口,则工厂调用setBeanNameA()方法传递Bean的ID。
4.BeanFactoryAware的setBeanFactory():
如果Bean有实现BeanFactoryAware接口,工厂调用setBeanFactory()方法传递工厂本身。
5.BeanPostProcessor的postProcessorBeforeInitialization():
如果有BeanPostProcessor和Bean关联,则其postProcessorBeforeInitialization()将被调用。
6.InitializingBean的afterPropertiesBean():
如果bean类实现了InitializingBean的接口,则调用afterPropertiesBean()方法。
7.Bean定义文件中定义init-method方法:
如果配置文件中定义了bean的init-method,则调用那个initBean()方法。
8.BeanPostProcessor的postProcessorAfterInitialization():
如果有BeanPostProcessor和Bean关联,则其postProcessorAfterInitialization()将被调用。此时bean已经实例化完毕。
2)bean销毁
1.DisposiableBean的destroy()方法
如果bean实现了DisposableBean的接口,则调用destroy()方法进行销毁。
2.Bean的配置文件中定义了destroy-method:
如果Bean的配置文件中定义了destroy-method,则执行指定的destroy()方法。
二、通过ApplicationContext实例化的bean的生命周期
在创建bean的过程中稍有不同,在BeanFactoryAware的setBeanFactory()方法之后,调用setApplicationContext()方法,然后执行一下方法。