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声明了销毁方法,该方法也会被调用。

 

posted @ 2020-08-06 11:17  小窝蜗  阅读(163)  评论(0)    收藏  举报