Spring注解-IOC(三)

Spring容器组件的生命周期:包含Bean的创建,初始化,销毁过程。下面将讨论容器中bean组件生命周期的相关影响因素。

  • 在xml配置文件中我们可以给<bean>标签添加init-method 和 destroy-method属性,作为bean创建后的初始化方法和IOC容器关闭后的bean销毁方法。
    <bean id="person" class="com.atguigu.ioc.bean.Person" scope="prototype" init-method="getAge" destroy-method="getName">
        <property name="name" value="张三"/>
        <property name="age" value="20"/>
    </bean>

-通过@Bean注解设置参数值initMethod、destroyMethod。

@Configuration
public class MainConfigOfLifeCycle {

    @Bean(initMethod = "init",destroyMethod = "destroy")
    public Car car(){
        return new Car();
    }
}
  • 通过让bean实现InitializingBean、DisposableBean接口,实现bean的初始化和销毁时方法。
public class InitDispoBean implements InitializingBean, DisposableBean {

    //对象创建并属性赋值之后调用
    public void afterPropertiesSet() throws Exception {
        System.out.println("属性设置完毕!");
    }

    public void destroy() throws Exception {
        System.out.println("容器已销毁了!");
    }
}
  • JSR250注解:
     @PostContruct: 在bean创建完成并且属性赋值完毕后执行初始化方法。
     @PreDestroy: 在容器销毁bean实例之前通知我们进行清理工作。
public class Dog {

    public Dog(){
        System.out.println("dog is Constructor...");
    }

    @PostConstruct  //对象创建并属性赋值之后调用
    public void init(){
        System.out.println("dog is PostConstruct...");
    }

    @PreDestroy
    public void destroy(){
        System.out.println("dog is PreDestroy...");
    }
}
  • 实现BeanPostProcessor接口: bean的后置处理器,在bean初始化前后进行一些处理工作。
     postProcessBeforeInitialization:在实例创建后,初始化init方法执行前执行该方法。
     postProcessAfterInitialization: 在实例创建后,初始化init方法执行后执行该方法。
/**
 * 添加到容器中,默认会对容器中所有的bean施加
 * postProcessBeforeInitialization、postProcessAfterInitialization方法。
 */
public class MyBeanPostProcessor implements BeanPostProcessor {

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean);
        return bean;
    }

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean);
        return bean;
    }
}

综上:在容器中测试

@Configuration
@Import({InitDispoBean.class, Dog.class, MyBeanPostProcessor.class})
public class MainConfigOfLifeCycle {
    @Bean(initMethod = "init",destroyMethod = "destroy")
    public Car car(){
        return new Car();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容