美文网首页
Spring IOC 容器对bean的生命周期进行管理过程

Spring IOC 容器对bean的生命周期进行管理过程

作者: 喊我小王吧 | 来源:发表于2019-06-21 19:10 被阅读0次

    Spring IOC 容器可以管理bean的生命周期,spring允许在bean生命周期内对其执行特定的任务。

    1 Spring IOC 容器对bean的生命周期进行管理过程

    1 通过构造器或者工厂方法创建bean实例
    2 为bean的属性设置值或者引用其他bean实例
    3 执行 bena初始化方法
    4 使用bean 实例
    5 关闭容器时候,执行bean销毁方法
    

    废话不多说上代码:

    User实体类

    public class User   {
     
        private Long id;
        private String name;
        private int age;
    
    
        public User(){
            System.out.println(" 1 调用构造器实例化对象!");
        }
    
        
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            System.out.println(" 2  设置属性值 或者 引用其他bean实例 !");
            this.age = age;
        }
    
    
        public void init(){
            System.out.println(" 3 调用bean 的 init 初始化方法 !");
        }
    
    
        public void destory(){
            System.out.println(" 5  关闭容器 执行 destory  销毁方法 !");
        }
     
    
        @Override
        public String toString() {
            return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
        }
    }
    
    

    配置类

    @Configuration  //相当于  xml  beans  标签
    public class beans {
    
        @Bean(value = "user2",initMethod = "init",destroyMethod = "destory")
        public User getUser2222() {
            
            User u = new User();
            u.setAge(111);
            return u;
        }
    }
    
    

    测试

    
        ConfigurableApplicationContext app = new AnnotationConfigApplicationContext(beans.class);
            User bean = (User) app.getBean("user2");
            System.out.println("4 使用bean " + bean);
            //关闭ioc容器
            app.close();
    

    结果

    1 调用构造器实例化对象!
    2 设置属性值 或者 引用其他bean实例 !
    3 调用bean 的 init 初始化方法 !
    4 使用bean User [id=null, name=null, age=111]
    5 关闭容器 执行 destory 销毁方法 !

    以上是spring ioc 容器对bean的生命周期的管理。

    假如又这么个需求,在bean初始化前后,想要对bean进行一些设置参数,校验信息等操作。上面的生命周期阶段无法满足我们的需求,好在Spring为我们提供了相应的接口。

    2bean的后置处理器

    Spring 对 bean的生命周期又进行了相应的扩展,提供了一种后置处理!

    
    /**
     * @description: bean 后置处理器: 对IOC 容器中 所有的bean都起作用。
     **/
    @Component
    public class MyBeanProcessor implements BeanPostProcessor {
    
    
        // bean 被创建的对象
        // beanName bean 对象的id值
    
        //在bean生命周期初始化之前执行
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println(" postProcessBeforeInitialization " );
            return bean;
        }
        //在bean生命周期初始化之后执行
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println(" postProcessAfterInitialization " );
            return bean;
        }
    }
    
    

    结果

     1 调用构造器实例化对象!
     2  设置属性值 或者 引用其他bean实例 !
     postProcessBeforeInitialization 
     3 调用bean 的 init 初始化方法 !
     postProcessAfterInitialization 
    4 使用bean User [id=null, name=null, age=111]
     5  关闭容器 执行 destory  销毁方法 !
    

    此时bean的生命周期变为7步骤:

    1 调用构造器实例化对象!
    2 设置属性值 或者 引用其他bean实例 !
    3 postProcessBeforeInitialization 初始化之前(将bean的实例传递给后置处理器的 postProcessBeforeInitialization 方法)
    4 调用bean 的 init 初始化方法 !
    5 postProcessAfterInitialization 初始化之后 (将bean的实例传递给后置处理器的 postProcessAfterInitialization 方法)
    6 使用bean User [id=null, name=null, age=111]
    7 关闭容器 执行 destory 销毁方法 !

    相关文章

      网友评论

          本文标题:Spring IOC 容器对bean的生命周期进行管理过程

          本文链接:https://www.haomeiwen.com/subject/odiuqctx.html