行业知识
【Spring高级】第3讲 Bean的生命周期
2026-11-13 17:07:17
来源:互联网转载
目录
- 基本的生命周期
- 后处理器
- ���结
基本的生命周期
为了演示生命周期的过程,我们直接使用 SpringApplication.run()方法,他会直接诶返回一个容器对象。
()import org.springframework.boot.SpringApplication;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplicationpublic class BeanLifecycleTest { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(BeanLifecycleTest.class, args); context.close(); }}然后定义一个Bean,如下:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;@Componentpublic class LifeCycleBean { public LifeCycleBean() { System.out.println("构造方法"); } /** * 依赖注入方法 * 当参数是一个对象时,可以直接注入 * 但是如果是String类型,则需要使用@Value,找到环境变量JAVA_HOME * * @param home */ @Autowired public void autowired(@Value("${JAVA_HOME}") String home) { System.out.println("依赖注入"); } /** * @PostConstruct 用来标记 bean 初始化完成后的回调方法 */ @PostConstruct public void init() { System.out.println("初始化"); } /** * @PreDestroy 用来标记 bean 销毁前的回调方法 */ @PreDestroy public void destory() { System.out.println("销毁"); }}上面的LifeCycleBean我们定义了构造方法、初始化方法、依赖注入方法、销毁方法。
()启动应用,打印如下:
构造方法依赖注入初始化2024-02-29 22:53:29.169 INFO 39870 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''2024-02-29 22:53:29.182 INFO 39870 --- [ main] c.c.demo02.chapter03.BeanLifecycleTest : Started BeanLifecycleTest in 1.724 seconds (JVM running for 7.593)2024-02-29 22:53:29.191 INFO 39870 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]销毁
上面就可以看出整个流程。
后处理器
除了基本的生命周期,下面看下加上后处理器后的流程。
import org.springframework.beans.BeansException;import org.springframework.beans.PropertyValues;import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor;import org.springframework.stereotype.Component;@Componentpublic class MyBeanPostProcessor implements InstantiationAwareBeanPostProcessor, DestructionAwareBeanPostProcessor { @Override public void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")) { System.out.println("
上一篇:java web简答(极其重要)
下一篇:r星服务器更新怎么关闭?