Spring bean初始化及销毁方法

共几种初始化方式

public class TestBean implements InitializingBean , CommandLineRunner , DisposableBean , ApplicationRunner {
    private String x;
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("执行了InitializingBean-afterPropertiesSet");
    }

    public void init(){
        System.out.println("执行了initMethod-init");
    }
    public void destroy(){
        System.out.println("执行了DisposableBean-destroy");
    }
    public void des(){
        System.out.println("执行了destroyMethod-des");
    }

    @Override
    public void run(String... args) {
        System.out.println("执行了CommandLineRunner-run");
    }

    @PostConstruct
    private void run(){
        System.out.println("执行了PostConstruct-run");
    }

    @PreDestroy
    private void predestory(){
        System.out.println("执行了PreDestroy-PreDestroy");
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("执行了ApplicationRunner-run");
    }
}
@Configuration
public class HttpSessionConfig {
    @Bean(initMethod = "init",destroyMethod = "des")
    @Scope("prototype") //多例模式  默认时单例模式
    public TestBean testBean(){
        return new TestBean();
    }

    /*@Bean
    public ServletRegistrationBean servletRegistrationBean(){
        return new ServletRegistrationBean( new TestServlet1(),"/test");
    }*/
}

 

bean单例模式下(注解的默认情况是单例,Scope(“singlon”),多例模式为Scope(“prototype”))@PostConstruct注解、implements InitializingBean重写afterPropertiesSet方法、@Bean的 initMethod属性指定的bean的成员方法、implements ApplicationRunner接口的run方法、implements CommandLineRunner的run方法,执行顺序和罗列顺序保持一致,而且执行afterPropertiesSet和initMethod有相关性,afterPropertiesSet执行出错则initMethod不会执行。单例模式下spring容器会在其启动时创建对象并实例化,多例模式则不会,会在获取时创建。单例模式下,容器关闭时会一次调用@PreDestroy注解标注方法、implements DisposableBean的destroy方法、@Bean的destroyMethod指定的成员方法。

bean的实例化:调用bean的构造方法,我们可以在bean的无参构造方法中执行相应的逻辑。
bean的初始化:在初始化时,可以通过BeanPostProcessor的postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法进行拦截,执行自定义的逻辑;通过@PostConstruct注解、InitializingBean和init-method来指定bean初始化前后执行的方法,在该方法中咱们可以执行自定义的逻辑。
bean的销毁:可以通过@PreDestroy注解、DisposableBean和destroy-method来指定bean在销毁前执行的方法,在该方法中咱们可以执行自定义的逻辑。

bean的生命周期

 

posted @ 2023-05-04 11:50  DreamCatt  阅读(105)  评论(0)    收藏  举报