Loading

spring注解驱动开发(2)——组件注册

指定初始化和销毁函数的方法有

  1. @Bean注解指定初始化和销毁方法
  2. 组件实现InitializingBean,DisposableBean接口
  3. 在方法上添加@PostConstruct和@PreDestroy注解

1. @Bean注解指定初始化和销毁方法

  • bean的生命周期:
    1. bean创建(构造函数)
    2. 初始化(初始化函数)
    3. 销毁(销毁函数)
  • 初始化:
    对象创建完成,并赋值好,调用初始化方法
  • 销毁:
    单实例:容器关闭的时候
    多实例:容器不会管理这个bean;容器不会调用销毁方法;
public class Car { 
   public Car(){
      System.out.println("car constructor...");
   } 
   public void init(){
      System.out.println("car ... init...");
   }   
   public void detory(){
      System.out.println("car ... detory...");
   }
}

指定初始化函数和销毁函数

@Configuration
public class MainConfigOfLifeCycle {	
	@Bean(initMethod="init",destroyMethod="detory")
	public Car car(){
         return new Car();
	}
}

只有在ioc容器关闭的时候才能触发销毁函数

@Test
public void test01(){
   //1、创建ioc容器
   AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
   System.out.println("容器创建完成...");
   applicationContext.getBean("car");
   //关闭容器
   applicationContext.close();
}

2. InitializingBean和DisposableBean

@Component
public class Cat implements InitializingBean,DisposableBean {
   public Cat(){
      System.out.println("cat constructor...");
   }
   @Override
   public void destroy() throws Exception {
      System.out.println("cat...destroy...");
   }
   @Override
   public void afterPropertiesSet() throws Exception {
      System.out.println("cat...afterPropertiesSet...");
   }
}

3. @PostConstruct和@PreDestroy

  • @PostConstruct:在bean创建完成并且属性赋值完成;来执行初始化方法
  • @PreDestroy:在容器销毁bean之前通知我们进行清理工作
@Component
public class Dog  {
   public Dog(){
      System.out.println("dog constructor...");
   }
   //对象创建并赋值之后调用
   @PostConstruct
   public void init(){
      System.out.println("Dog....@PostConstruct...");
   }  
   //容器移除对象之前
   @PreDestroy
   public void detory(){
      System.out.println("Dog....@PreDestroy...");
   } 
}

4. BeanPostProcessor【interface】:bean的后置处理器

在初始化函数的前后执行
Bean的构造过程:

  1. 构造函数
  2. postProcessBeforeInitialization
  3. 初始化函数
  4. postProcessAfterInitialization

postProcessBeforeInitialization:在初始化之前工作
postProcessAfterInitialization:在初始化之后工作
BeanPostProcessor 的配置对所有的Bean都有效

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
   @Override
   public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
      System.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean);
      return bean;
   }
   @Override
   public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
      System.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean);
      return bean;
   }
}

其中这个方法的返回值应该是bean对象

posted @ 2021-03-26 12:02  克豪  阅读(69)  评论(0)    收藏  举报