初始化与销毁
- Spring提供了多种初始化和销毁手段
- 它们的执行顺序
A07Application.java
package com.lucifer.itheima.a07;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;@SpringBootApplication
public class A07Application {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(A07Application.class,args);context.close();}//输出结果为
// 2023-11-08 19:52:53.870 INFO 55612 --- [ main] com.lucifer.itheima.a07.Bean1 : 初始化1
// 2023-11-08 19:52:53.870 INFO 55612 --- [ main] com.lucifer.itheima.a07.Bean1 : 初始化2
// 2023-11-08 19:52:53.870 INFO 55612 --- [ main] com.lucifer.itheima.a07.Bean1 : 初始化3@Bean(initMethod = "init3")public Bean1 bean1(){return new Bean1();}//输出结果为
// 2023-11-08 19:56:02.452 INFO 53212 --- [ main] com.lucifer.itheima.a07.Bean2 : 销毁1
// 2023-11-08 19:56:02.452 INFO 53212 --- [ main] com.lucifer.itheima.a07.Bean2 : 销毁2
// 2023-11-08 19:56:02.452 INFO 53212 --- [ main] com.lucifer.itheima.a07.Bean2 : 销毁3@Bean(destroyMethod = "destroy3")public Bean2 bean2() {return new Bean2();}
}
Bean1.java
package com.lucifer.itheima.a07;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;import javax.annotation.PostConstruct;@Slf4j
public class Bean1 implements InitializingBean {@PostConstructpublic void init1(){log.info("初始化1");}@Overridepublic void afterPropertiesSet() throws Exception {log.info("初始化2");}public void init3(){log.info("初始化3");}
}
Bean2.java
package com.lucifer.itheima.a07;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.DisposableBean;import javax.annotation.PreDestroy;@Slf4j
public class Bean2 implements DisposableBean {@PreDestroypublic void destroy1() {log.info("销毁1");}@Overridepublic void destroy() throws Exception {log.info("销毁2");}public void destroy3(){log.info("销毁3");}
}