Spring Bean的生命周期
参考:Spring中的bean的理解,书《spring in action》,https://www.jianshu.com/p/c0084f44f6c7,https://blog.csdn.net/pengzhisen123/article/details/79678987
理解下Spring中bean的概念:
目的:bean相当于Spring的一个组件,这个组件是为了某功能具体实现,通常我们定义一个bean,就相当于Spring容器给你提供一个简便的方法来调用这个组件实现你要的功能。
注:spring最主要的应该就是由这些bean组成的bean工厂
bean的主要组成:
例子:
<bean id="userAction" class="com.neusoft.gmsbs.gms.user.action.UserAction" scope="prototype">
<property name="userBO" ref="userBO" />
</bean>
属性:
Id : 标识该bean的名称,通过factory.getBean(“id”)来获得实例。
Class : 该bean的类路径。
<property name="userBO" ref="userBO" />userAction中需要实现userBO这个功能
Singleton : 默认为true,即单实例模式,每次getBean(“id”)时获取的都是同一个实例,如果设置为false,即原型模式,则每次获取的是新创建的实例。
Init-method : 在bean实例化后要调用的方法(bean里定义好的方法)。
Destroy-method : bean从容器里删除之前要调用的方法
Autowire : 其属性要通过何种方法进行属性的自动装配。
调用一个bean组件:
ApplicationContext factory = new ClassPathXmlApplicationContext("beans.xml");
UserAction action= (UserAction)factory.getBean("userAction");
得到的action就是一个com.neusoft.gmsbs.gms.user.action.UserAction类的实例。--这里是你把一个类放到Spring容器作为他的组件来实现初始化一个实例
简单来说就是等于你UserAction action = new UserAction()得到的结果。 --这个是JVM对一个类的实例化,所以说意义不一样
Spring装在bean的流程图解:

总结:
1. Spring对bean初始化 (实例化)
2.Spring将值和bean的引用注入到bean的对应属性中 (填充属性)
3. 如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法 (个人理解:将bean组件的ID交给组件工厂管理)
4.如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来
6.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessBeforeInitialization()方法
7.如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似地,如果bean使用init-method声明了初始化方法,该方法也会被调用
8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization()方法
总结:3-8就个人觉得就相当于将bean实现给Spring托管
9.此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁
10.如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。

浙公网安备 33010602011771号