项目路径:https://gitee.com/wuhan1/spring-parent.git 下的spring-06,
工程截图
1.指明initMethod和destroyMethod,新建Stu类,
public class Stu {
public void myInit(){
System.out.println("学生初始化");
}
public void myDestroy(){
System.out.println("学生销毁");
}
}
把Stu注入当容器中,并增加初始化myInit和销毁方法myDestroy
@Configuration
@ComponentScan("com.xqc")//扫描的包
public class SpringConfig {
@Bean(initMethod = "myInit",destroyMethod = "myDestroy")
public Stu stu(){
return new Stu();
}
}
启动和关闭容器,查看结果
public class SpringTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
context.close();//关闭
}
}
2.@PostConstruct(初始化)+@PreDestroy(销毁方法),JSR250提供的.。新建Stu2类,并用@PostConstruct和@PreDestroy注解表明初始化和销毁方法
public class Stu2 {
/**
* 初始化方法
*/
@PostConstruct
public void myInit(){
System.out.println("学生初始化2");
}
/**
* 销毁方法
*/
@PreDestroy
public void myDestroy(){
System.out.println("学生销毁2");
}
}
在Config类中
@Bean
public Stu2 stu2(){
return new Stu2();
}
打印结果
3.实现InitializingBean和DisposableBean接口,实现接口对应的方法,新建学生类Stu3
public class Stu3 implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("学生初始化3");
}
@Override
public void destroy() throws Exception {
System.out.println("学生销毁3");
}
}
@Bean
public Stu3 stu3(){
return new Stu3();
}
执行结果
4.实现BeanPostProcessor接口,此接口会拦截所有的Bean,可以改bean的返回类型,新建MyBeanPostProcessor
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
/**
* 拦截所有的bean
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// if(bean instanceof Stu4){
System.out.println("MyBeanPostProcessor初始化4");
// }MyBeanPostProcessor
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// if(bean instanceof Stu4){
System.out.println("MyBeanPostProcessor销毁4");
// }
System.out.println(bean);
return bean;
}
}