spring bean生命周期及初始化销毁方法的实现

bean 的生命周期#

bean 的生命周期:初始化、创建及使用、销毁
IOC容器在初始化时,会自动创建bean对象(单例模式),然后调用bean对象的init方法,当容器关闭时再调用bean对象的destroy方法

初始化及销毁的几种方式

1. xml方式:

<!--init-method为初始化方法,destroy-method为销毁方法-->
<bean id="student" class="org.lyh.entity.Student" init-method="myInit" destroy-method="myDestroy">

2. 注解方式

1.注解方式使用@Bean+方法返回值方式

//initMethod为初始化方法,destroyMethod为销毁方法
 @Bean(initMethod = "myInit" ,destroyMethod = "myDestroy")
 public Student myStudent(){
    Student student = new Student(2,"李健康",21);
    student.setAddress(new Address("兰考县","商丘市睢阳区"));
    return  student;
}

2. Java规范:JSR250注解方式使用的是三层组件方式

将响应组件加入@Componter注解,value为bean的id值
@PostConstruct为初始化注解
@PreDestroy为销毁注解

@Component(value = "myConverter")
public class MyIntToStringConverter {
    @PostConstruct
    public void init(){
        System.out.println("myConverter初始化");
    }
    public  void myConverter(){
        System.out.println("myConverter...");
    }
    @PreDestroy
    public  void destroy(){
        System.out.println("myConverter销毁");
    }
}

将@Componter注解定义的类添加到配置类中(通过扫描器)

//配置类
@Configuration
//扫描器,扫描org.lyh包下的所有三层注解
@ComponentScan("org.lyh")
public class MyConfig {
}

获取@Componter注解中的bean,bean的id值就是该注解的value

ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
MyIntToStringConverter converter = (MyIntToStringConverter)context.getBean("myConverter");
converter.myConverter();

3. 接口方式##

1. 两个接口

适用于三层组件方式
InitializingBean为初始化接口
DisposableBean为销毁接口

自定义实现类实现InitializingBean接口和DisposableBean接口,重写接口方法

@Component(value = "myFunction")
public class MyFunction implements InitializingBean , DisposableBean {
    //销毁方法
    @Override
    public void destroy() throws Exception {
        System.out.println("myfunction销毁方法");
    }

    public void method(){

    }
    //初始化方法
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("myfunction初始化");
    }
}

2.一个接口(给容器中所有的bean加初始化及销毁方法)

适用于三层组件方式
BeanPostProcessor接口
注意:
BeanPostProcessor接口是给容器中所有的bean加初始化及销毁方法

自定义实现类实现BeanPostProcessor接口,重写接口方法

@Component(value = "myBeanPostProcessor")
public class MyBeanPostProcessor implements BeanPostProcessor {
    //初始化 bean为初始化对象,beanName为初始化对象的id
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("myBeanPostProcessor初始化");
        System.out.println("初始化对象"+beanName+"****"+bean);
        return bean;
    }
    //销毁
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("myBeanPostProcessor销毁");
        System.out.println("销毁对象"+beanName+"****"+bean);
        return bean;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值