Spring bean初始化方法的几种写法

项目路径: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;
    }
}


 


 

猜你喜欢

转载自blog.csdn.net/dhj199181/article/details/108683906
今日推荐