zoukankan      html  css  js  c++  java
  • Spring Bean的生命周期及其应用

    一、什么是Bean?

    In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container.

    Bean是一个由Spring IoC容器实例化、组装和管理的对象,bean就是一个实例。

     

    二、Bean 的完整生命周期

    Bean从创建-参与计算流程-销毁,spring通过IOC控制翻转进行操作,所以bean的整个生命周期都会暴露操作实例的方法,通过这些方法,可以更加灵活的操控每个实例对象。

    下面展示了一个Bean的构造过程

    深究Spring中Bean的生命周期

    Bean 的生命周期

    1. Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化,配置文件中<bean>表示一个bean,也可以使用各种注解

    2. 然后对Bean在文件或注解中设置的属性等进行注入;

    3. 如果Bean实现了BeanNameAware接口,Spring将Bean的Id传递给setBeanName()方法,此处可以重新修改beanName;

    4. 如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;

    5. 如果Bean实现了ApplicationContextAware接口,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来。

    6. 如果Bean实现了BeanPostProcessor接口,Spring就将调用他们的postProcessBeforeInitialization()方法。

    7. 如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用

    8. 如果Bean 实现了BeanPostProcessor接口,Spring就将调用他们的postProcessAfterInitialization()方法。

    9. 此时,Bean已经准备就绪,可以被应用程序使用了。他们将一直驻留在应用上下文中,直到应用上下文被销毁。

    10. 如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用。

    记忆方法:数猪名 工厂上下 初始化四阶段 系统自我销毁 

    三、生命周期中函数在开发中有什么用

    我以前看到bean的生命周期的时候只是简单的记住它的顺序,感觉没什么用,真的是to yong to simple;

    1.属性注入

    <bean id="car1" class="com.demo.Car">
            <property name="name" value="宝马"></property>
            <property name="price" value="100000"></property>
    </bean>

    这样在car的类中有一个

    public Car(String name,double price){
        this.name=name;
        this.price=price;
    }

    就可以实现一个设置好初始值得一个bean

    2.BeanNameAware接口,有一个setBeanName方法

    可以在类中新建一个String beanName变量,通过setBeanName进行复制,这样就可以知道这个bean的Name,

    上面的id="car1" 也会通过这个setBeanName传入到实例中;

    3.BeanFactoryAware接口,可以获得创建这个实例的工厂方法

    BeanFactory  可以获得或者设置类
    String FACTORY_BEAN_PREFIX = "&";
    
        Object getBean(String var1) throws BeansException;
    
        <T> T getBean(String var1, Class<T> var2) throws BeansException;
    
        <T> T getBean(Class<T> var1) throws BeansException;
    
        Object getBean(String var1, Object... var2) throws BeansException;
    
        boolean containsBean(String var1);
    
        boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;
    
        boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;
    
        boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;
    
        Class<?> getType(String var1) throws NoSuchBeanDefinitionException;
    
        String[] getAliases(String var1);

    4.ApplicationContextAware  可以获得ApplicationContext 上下文,

    applicationContext.getBeansOfType(RegistryConfig.class
    applicationContext可以通过getBeansOfType获得所有已经继承RegistryConfig这个配置文件的实例Map,
    Map的key是beanName value是对应的实例,这样这个类需要什么配置就能很好的确定

    5.BeanPostProcessor接口的postProcessBeforeInitialization 、postProcessAfterInitialization

    是在系统初始化和自定义初始化之前和之后的一些处理方法,针对所有Spring上下文中所有的bean,
    可以在配置文档applicationContext.xml中配置一个BeanPostProcessor,

    然后对所有的bean进行一个初始化之前和之后的代理



    6.InitializingBean接口,afterPropertiesSet是系统的初始化方法,此处可以对父类做一些基本的初始化
    7.调用自己定义的初始化方法
    <bean id="beanA"  class="classA"  init-method="anotherInit">
    
    </bean>

    init-method 配置的初始化方法

    8.DisposableBean 系统销毁时调用的方法

    9.自定义销毁方法:

    <bean class="com.demo" init-method="start" destroy-method="destroy">
    </bean>

    destroy-method方法



  • 相关阅读:
    通讯录封装实现
    简单通讯录的实现 main..h .m文件全部
    iOS 开发 OC编程 字典和集合 排序方法
    iOS 开发 OC编程 数组冒泡排序.图书管理
    iOS 开发 OC编程 属性和字符串练习
    iOS 开发 OC编程 属性和字符串
    iOS 开发 OC编程 便利构造器以及初始化方法
    iOS 开发 OC编程 方法的书写
    IOS 开发 OC编程 类和对象
    iOS 开发 c语言阶段考试题
  • 原文地址:https://www.cnblogs.com/becoding/p/13416766.html
Copyright © 2011-2022 走看看