首页 >> 知识 >> Bean 初始化和销毁的四种回调方法

Bean 初始化和销毁的四种回调方法

Bean初始化和销毁的四种回调方法 * 1)、指定初始化和销毁方法; * 通过@Bean指定init-method和destroy-method; * 2)、通过让Bean实现InitializingBean(定义初始化逻辑),DisposableBean(定义销毁逻辑); * 3)、使用JSR250; * @PostConstruct:在bean创建完成并且属性赋值完成;来执行初始化方法 * @PreDestroy:在容器销毁bean之前通知蜜桃成人网站入口进行清理工作 * 4)、BeanPostProcessor【interface】:bean的后置处理器; * 在bean初始化前后进行一些处理工作; * postProcessBeforeInitialization:在初始化之前工作 * postProcessAfterInitialization:在初始化之后工作

bean创建—初始化----销毁的过程

蜜桃成人网站入口可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用蜜桃成人网站入口自定义的初始化和销毁方法;

第一种、通过@Bean指定init-method和destroy-method; public class Car {public Car() {System.out.println("car...constructor");}public void init(){System.out.println("car...init");}public void destroy(){System.out.println("car...destroy");}}@ComponentScan("com.spring.bean")@Configurationpublic class MainConfigOfLifeCycle {/** * 构造(对象创建) * 单实例:在容器启动的时候创建对象 * 多实例:在每次获取的时候创建对象 * * 初始化: * 对象创建完成,并赋值完成,调用初始化方法。。。 * 销毁: * 单实例:容器关闭的时候 * 多实例:容器不会管理这个bean;容器不会调用销毁方法; * */@Bean(initMethod = "init",destroyMethod = "destroy")public Car car(){return new Car();}}

测试:

@Testpublic void test01(){ AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class); System.out.println("创建容器完成!"); //关闭容器 applicationContext.close();}打印:car...constructorcar...init创建容器完成!car...destroy 第二种、Bean实现 InitializingBean, DisposableBean 接口 @Componentpublic class Cat implements InitializingBean, DisposableBean {public Cat() {System.out.println("cat constructor...");}@Overridepublic void destroy() throws Exception {System.out.println("cat...destroy...");}//Bean创建并且属性赋值完成时调用@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("cat...afterPropertiesSet...");}}//通过@ComponentScan("com.spring.bean")扫描组件 第三种、@PostConstruct和@PreDestroy注解

@PostConstruct和@PreDestroy是JSR250里面的注解;(还有@Resource)

JSR是 Java Specification Requests 的缩写,意思是Java 规范提案。是指向 JCP (Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。(来自百度百科)

新增一个标准化技术规范的正式请求,例如创建对象之前可以做什么,销毁一个对象之前可以做什么等一系列的操作规范;

@PostConstruct和@PreDestroy都是属于Bean生命周期的一部分;

@PostConstruct:在bean创建完成并且属性赋值完成之后来执行初始化方法;

@PreDestroy:在容器销毁bean之前执行的方法,例如一些清理工作,关流等;

@Componentpublic class Dog {public Dog() {System.out.println("dog constructor...");}@PostConstructpublic void init(){System.out.println("dog init...");}@PreDestroypublic void destroy(){System.out.println("dog destroy");}}//通过@ComponentScan("com.spring.bean")扫描组件 第四种、通过BeanPostProcessor 后置处理器

在bean初始化前后进行一些处理工作;

postProcessBeforeInitialization:在初始化之前工作

postProcessAfterInitialization:在初始化之后工作

可以作为Bean初始化前后的回调方法;

//后置处理器:初始化前后进行处理工作//将后置处理器加入到容器中@Componentpublic class MyBeanPostProcessor implements BeanPostProcessor {//在初始化之前工作 //Object bean: 可以对Bean进行再一次封装,也可以直接返回 //String beanName: Bean的名称@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean);return bean;}//在初始化之后工作@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean);return bean;}}
网站地图