Bean的生命周期

简介: Bean的生命周期

@[TOC]

1 指定初始化和销毁方法

  • 创建Car

    public class Car {
         
    
      public Car() {
         
          System.out.println("car constructor......");
      }
    
      public void init(){
         
          System.out.println("car ...init...");
      }
    
      public void destory(){
         
          System.out.println("car ...destory...");
      }
    }
    
  • 写配置类

    @Configuration
    public class MainConfigOfLifeCycle {
         
    
      @Bean(value = "car",initMethod="init",destroyMethod = "destory")
      public Car car(){
         
          return new Car();
      }
    }
    
  • 测试
    @Test
      public void test01(){
         
          AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
          System.out.println("容器创建完成");
          context.close();
      }
    

    2 使用接口InitializingBeanDisposableBean实现初始化和销毁

  • 新建Cat类实现接口InitializingBeanDisposableBean
    ```java
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.stereotype.Component;

@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 ....");
}

//Bean创建完成,并且属性都复制后执行
@Override
public void afterPropertiesSet() throws Exception {
    System.out.println("cat ... afterPropertiesSet ...");
}

}

* 注入IOC容器
```java
@Configuration
@ComponentScan("com.yunfeng.spring2.entity")
public class MainConfigOfLifeCycle {}
  • 测试
    @Test
      public void test01(){
         
          AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
          System.out.println("容器创建完成");
          context.close();
      }
    

    3 使用JSR250中的@PreDestroy@PostConstruct

    ```java
    import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component
public class Dog {

public Dog() {
    System.out.println("Dog constructor....");
}

//容器关闭时调用
@PreDestroy
public void destroy() throws Exception {
    System.out.println("Dog ... destroy ....");
}

//Bean创建完成,并且属性都复制后执行
@PostConstruct
public void afterPropertiesSet() throws Exception {
    System.out.println("Dog ... PostConstruct ...");
}

}

# 4 BeanPostProcessor后置处理器
* 在bean初始化前后进行一些处理工作
```java
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

/**
 * 后置处理器:初始化前后进行处理工作
 */
@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;
    }
}
目录
相关文章
|
2天前
|
XML Java 数据格式
SpringBean的生命周期
SpringBean的生命周期
28 0
|
2天前
|
前端开发 Java 开发者
Bean的生命周期和作用域
Bean的生命周期和作用域
|
2天前
|
Java 开发者 Spring
Bean 的生命周期了解么
Bean 的生命周期了解么
|
10月前
|
Java 容器 Spring
Bean生命周期
Bean生命周期
|
5月前
|
Java Spring 容器
bean的生命周期
bean的生命周期
30 0
|
9月前
|
Java Spring 容器
深入理解Spring源码之bean的生命周期控制器BeanPostProcessor
深入理解Spring源码之bean的生命周期控制器BeanPostProcessor
|
9月前
|
存储 安全 Java
Bean 的作用域和生命周期
Bean 的作用域和生命周期
47 1
|
9月前
|
XML Java 数据格式
Bean 的生命周期
Bean 的生命周期介绍
|
9月前
|
XML 安全 Java
Bean作用域和生命周期
Bean作用域和生命周期
|
10月前
|
XML Java 数据格式
SpringBean生命周期
SpringBean生命周期