- 新建一个普通的类
package com.xiaohan.ch2.prepost;
/**
* Java配置方式
*/
public class BeanWayService {
public void init() {
System.err.println("@Bean-init-method");
}
public void destroy() {
System.err.println("@Bean-destory-method");
}
public BeanWayService() {
System.err.println("BeanWayService构造函数");
}
}
- 新建一个使用注解指定了初始化方法 和 销毁前方法
package com.xiaohan.ch2.prepost;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* 注解方式
*/
public class AnnotationWayService {
// 2 实例化后
@PostConstruct
public void init() {
System.err.println("Annotation-init-method");
}
// 3 销毁前
@PreDestroy
public void destroy() {
System.err.println("Annotation-destory-method");
}
// 1 构造
public AnnotationWayService() {
System.err.println("AnnotationWayService构造函数");
}
}
- 配置类
package com.xiaohan.ch2.prepost;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
@Configuration
@ComponentScan("com.xiaohan.ch2.prepost")
public class PrePostConfig {
@Bean
public AnnotationWayService annotationWayService() {
return new AnnotationWayService();
}
// 指定初始化方法 和 销毁前方法
@Bean(initMethod = "init", destroyMethod = "destroy")
public BeanWayService beanWayService() {
return new BeanWayService();
}
}
- Main测试
package com.xiaohan.ch2.prepost;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
// Bean的初始化和销毁
public class Main {
public static void main(String[] args) {
// 这里不使用ApplicationContext接口接收了 因为没有close方法
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrePostConfig.class);
ac.close();
}
}
输出 可以看到 先实例化的 后销毁
AnnotationWayService构造函数
Annotation-init-method
BeanWayService构造函数
@Bean-init-method
@Bean-destory-method
Annotation-destory-method