文章目录


Bean的生命周期

Bean从创建到初始化到销毁的过程

1.原来的xml方式

Spring_Bean的生命周期_注解方式_生命周期

2.注解@Bean

Spring_Bean的生命周期_注解方式_spring_02

public class Car {
public void init(){
System.out.println("init.......");
}

public void destroy(){
System.out.println("destroy............");
}
}
@Configuration
public class MainConfigLife {
@Bean(initMethod = "init", destroyMethod = "destroy")
public Car car(){
return new Car();
}
}

测试:

public class Test03 {
@Test
public void test1(){
//单实例:1.创造对象:容器启动的时候, 2.初始化:对象创建完成,赋值好,调用初始化方法 3.销毁:容器关闭的时候
//多实例:1.每次获取对象的时候 2.同上 3. 不会调用销毁方法
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfigLife.class);
System.out.println("容器开启");
context.close();
}
}

Spring_Bean的生命周期_注解方式_生命周期_03

3.使用JSR250中的@PostConstruct和@PreDestroy

在创建前和在销毁后

Spring_Bean的生命周期_注解方式_spring_04

public class Dog {
public void dog(){
System.out.println("dog construct........");
}
@PostConstruct
public void init(){
System.out.println("dog init........");
}
@PreDestroy
public void destroy(){
System.out.println("dog destroy...........");
}
}
@ComponentScan("com.Zjy.bean")
//如果要使得后置处理器有效必须添加扫描器
@Configuration
public class MainConfig {
@Bean
public Dog dog(){
return new Dog();

}
}

必须要加入扫描注解才可以生效

    @Test
public void test1(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
// Dog bean = context.getBean(Dog.class);
//
context.close();
}

Spring_Bean的生命周期_注解方式_bean_05

4.BeanPostProcessor后置处理器

Spring_Bean的生命周期_注解方式_生命周期_06

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
System.out.println("postProcessBeforeInitialization" + o + s);
return o;
}

public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
System.out.println("postProcessAfterInitialization" + o + s);
return o;
}
}

需要继承BeanPostProcessor接口然后将这个类加入到容器中,在前方加入@Component注解

Spring_Bean的生命周期_注解方式_spring_07
前方打印的是Spring内置的Bean

Spring底层对于BeanPostProcessor的使用:
1.bean的赋值
2.注入其他组件
3.@Autowired
4.生命周期注解功能
5.@Async