要想在使用bean之前或者使用之后做一些操作,spring提供了两种实现方式:
- 使用@Bean的initMethod和destroyMethod(相当于XML配置方式的init-method和destroy-method)
- 使用注解@PostConstruct和@PreDestroy
-
示例
public class DemoService {
public void init() {
System.out.println("初始化时调用----->DemoService");
}
public DemoService() {
super();
System.out.println("构造函数------->DemoService");
}
public void destroy() {
System.out.println("销毁时调用------>DemoService");
}
}
以上使用第一种方式来实现。
public class DemoPrototypeService {
@PostConstruct
public void init() {
System.out.println("初始化时调用----->DemoPrototypeService");
}
public DemoPrototypeService() {
super();
System.out.println("构造函数------->DemoPrototypeService");
}
@PreDestroy
public void destroy() {
System.out.println("销毁时调用------>DemoPrototypeService");
}
}
以上使用注解实现。
配置
@Configuration
@ComponentScan("com.ys.base.mocktest")
public class Config {
@Bean(initMethod="init",destroyMethod="destroy")//声明初始化方法和销毁方法
public DemoService getDemoService() {
return new DemoService();
}
@Bean
public DemoPrototypeService getDemoPrototypeService() {
return new DemoPrototypeService();
}
}
运行
public class Application {
public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(Config.class);
DemoService demoService1 = context.getBean(DemoService.class);
DemoPrototypeService demoPrototypeService1 =
context.getBean(DemoPrototypeService.class);
context.close();
}
}
结果
构造函数------->DemoService
初始化时调用----->DemoService
构造函数------->DemoPrototypeService
初始化时调用----->DemoPrototypeService
销毁时调用------>DemoPrototypeService
销毁时调用------>DemoService
通过以上示例能够清楚的明白两种方式的使用,但是这里推荐使用注解的形式。