美文网首页spring 相关
spring 注解--bean 的生命周期

spring 注解--bean 的生命周期

作者: aix91 | 来源:发表于2018-12-31 16:36 被阅读0次

1. 生命周期

创建 -> init -> destroy

2. 定义生命周期的方法

  1. @Bean指定init-method和destroy-method
  2. 实现InitializingBean和DisposableBean接口
  3. 使用JSR250里面定义的注解:@PostConstruct(标注在方法上的,对象创建并赋值之后调用);@PreDestroy(bean销毁之前调用)
  4. 使用BeanPostProcessor,实现接口里的方法;(工作在初始化前后)

3. 实例

  1. @Bean 里面的initMethod 和destroyMethod
@Configuration
public class MyBeanLifeCycle {
    @Scope(scopeName = "singleton")
    @Bean(name = "car", initMethod = "init", destroyMethod = "destroy")
    public Car getCar() {
        return new Car();
    }
}

2.InitializingBean和DisposableBean接口

public class Person implements InitializingBean, DisposableBean {
    public Person() {
        System.out.println("person constructor");
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("person destroy");
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("person init");
    }
}
  1. @PostConstruct和@PreDestroy注解
public class Student {
    public Student() {
        System.out.println("student constructor");
    }
    @PostConstruct
    public void init() {
        System.out.println("student init");
    }
    @PreDestroy
    public void destroy() {
        System.out.println("student destroy");
    }
  1. 使用BeanPostProcessor. (为所有的bean初始化前后,添加处理方法)
public class BeanProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization ===>" + beanName);
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization ===>" + beanName);
        return bean;
    }
}

Note: 当定义的bean是单例时,当容器关闭时,相应的bean也会自动销毁;如果bean是prototype时,bean不会自动销毁。

相关文章

网友评论

    本文标题:spring 注解--bean 的生命周期

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