Spring注解开发---bean的生命周期

本文详细介绍了Spring框架中Bean的生命周期管理,包括初始化、销毁等阶段。通过四种不同方式展示了如何定义和实现Bean的生命周期方法,涉及注解、接口及BeanPostProcessor的使用。

Bean的生命周期:

  •   创建(new ...) -> 初始化(赋初值)-> ....使用... ->  销毁	(servlet)
    
方法一: Student.java ——适用于:@Bean+返回值方式

1、编写初始化、销毁方法

public class Student {
	public void myInit() {
		System.out.println("init----");
	}
	public void myDestory() {
		System.out.println("destory ----");
	}
}

2、配置:

@Bean(value = "student",initMethod = "myInit",destroyMethod = "myDestory") 

application.xml

<bean id="student" class="org.entity.Student" init-method="myInit" destroy-method="myDestory">

IOC的顺序:IoC容器在初始化时,会自动创建对象(构造方法) -> init ->… -> 当容器关闭时 调用destroy…

方法二 : 三层注解+功能性类注解@Component
  • JSR250规范,两个注解
    • 1.将响应组件 加入 @Component注解、 给初始化方法加@PostConstruct、给销毁方法加@PreDestroy
      @PostConstruct:相当于方法一的init
      @PreDestroy:相当于方法一的destroy
@Component("testConverter")
public class TestIntToStringConverter {  
    @PostConstruct
    public void  init(){
        System.out.println("init+++");
    }
    public void myConvertor(){
        System.out.println("---核心方法---");
    }
    @PreDestroy
    public void destory(){
        System.out.println("destory+++");
    }
}
方法三:两个接口 ——适用于三层组件(扫描器+三层组件)
  • 初始化:只需要 实现InitializingBean接口中的**afterPropertiesSet()**方法
  • 销毁:实现DisposableBean 接口中的**destroy()**方法
@Component
public class MyFunction implements InitializingBean , DisposableBean {
    public void myConvertor(){
        System.out.println("---核心方法---");
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("myFunction init.....");
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("myFunction destroy...");
    }
}
方法四:一个接口 ——适用于三层组件
  • 容器中所有Bean加初始化、销毁
  • 接口BeanPostProcessor:拦截了所有中容器的Bean
@Component
public class MyBean implements BeanPostProcessor {
  //会拦截所有的bean 加初始化
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        //可以对 所有的bean 进行修改 以及更换 
        if(bean instanceof Student){
          Student stu =   (Student)bean;
          stu.setName("Student.name已被修改----");
           System.out.println("...MyBean ..init.....");
          return stu ; 
        }
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("MyBean ..destory..");
        return bean;
    }
}

总结

  • 如果是注解形式 , 随便写一个方法 ,然后加上相应注解即可
  • 如果是接口形式,必须 实现接口中规定的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值