Spring Bean 的生命周期
<p><span data-cke-copybin-start="1"></span>Spring Bean 的生命周期是指从 Bean 被 <strong>创建、初始化、使用到销毁 </strong>的完整过程,这一过程由 Spring 容器严格管理。</p><p><strong>1、实例化(Instantiation)</strong></p>
<ul>
<li>通过反射、工厂方法等方式创建 Bean 实例。</li>
</ul>
<p><strong>2、依赖注入(Dependency Injection)</strong></p>
<ul>
<li>为 Bean 的字段或方法<strong>注入</strong>依赖对象,如通过<code>@Autowired</code>、<code>@Value</code>等注解,或通过XML配置注入。
<pre class="language-java highlighter-hljs"><code>@Component
public class UserService {
@Autowired
private UserRepository userRepository; // 依赖注入阶段会赋值
}</code></pre>
</li>
</ul>
<p><strong>3、初始化前处理(PostProcessBeforeInitialization)</strong></p>
<ul>
<li>允许自定义 Bean 初始化前的修改。</li>
<li>BeanPostProcessor#postProcessBeforeInitialization:所有 Bean 都会经过此接口处理。</li>
<li>典型实现:ApplicationContextAwareProcessor(处理Aware接口,如ApplicationContextAware)。</li>
</ul>
<p><strong>4、初始化(Initialization)</strong></p>
<ul>
<li>执行 Bean 的初始化逻辑。</li>
<li>实现 <strong>InitializingBean </strong>接口,使用 <strong>@PostConstruct</strong> 注解,都可以进行初始化。
<pre class="language-java highlighter-hljs"><code>public class DataSource implements InitializingBean {
@Override
public void afterPropertiesSet() {
// 初始化数据库连接
}
}</code></pre>
<pre class="language-java highlighter-hljs"><code>@Component
public class CacheService {
@PostConstruct
public void initCache() {
// 加载缓存数据
}
}</code></pre>
</li>
</ul>
<p><strong>5、初始化后处理(PostProcessAfterInitialization)</strong></p>
<ul>
<li>允许自定义 Bean 初始化后的修改(如代理生成)。</li>
<li>BeanPostProcessor#postProcessAfterInitialization:典型应用是 <strong>AOP 代理</strong>创建(如AnnotationAwareAspectJAutoProxyCreator)。</li>
</ul>
<p><strong>6、Bean 可用(Ready for Use)</strong></p>
<ul>
<li>Bean 已完全初始化,可被应用程序获取并使用。</li>
</ul>
<p><strong>7、销毁前处理(PostProcessBeforeDestruction)</strong></p>
<ul>
<li>容器关闭时执行 Bean 的销毁前逻辑。</li>
<li>在<code>ConfigurableApplicationContext#close()</code>或<code>DisposableBeanAdapter#destroy()</code>时触发。</li>
</ul>
<p><strong>8、销毁(Destruction)</strong></p>
<ul>
<li>实现 <strong>DisposableBean</strong> 接口,使用 <strong>@PreDestroy</strong> 注解,都可以对 Bean 进行销毁。
<pre class="language-java highlighter-hljs"><code>public class DatabaseConnection implements DisposableBean {
@Override
public void destroy() {
// 关闭数据库连接
}
}</code></pre>
<pre class="language-java highlighter-hljs"><code>@Component
public class ResourceService {
@PreDestroy
public void releaseResources() {
// 释放系统资源
}
}</code></pre>
</li>
</ul>
<p>Spring Bean 的生命周期,通过 <strong>"实例化→注入→初始化→销毁" </strong>的阶段划分,结合接口与注解的扩展点,允许我们在各个环节介入自定义一些逻辑,从而能实现一些我们想要的效果。</p>
<p style="text-align: right"><span style="color: rgba(53, 152, 219, 1)">命是弱者的借口,运是强者的谦辞。-- 烟沙九洲</span></p><br><br>
来源:https://www.cnblogs.com/yanshajiuzhou/p/18973918
頁:
[1]