`

@PostConstruct 和 @PreDestroy 使用

阅读更多

@PostConstruct 和 @PreDestroy

Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,您既可以通过实现 InitializingBean/DisposableBean 接口来定制初始化之后 / 销毁之前的操作方法,也可以通过 <bean> 元素的 init-method/destroy-method 属性指定初始化之后 / 销毁之前调用的操作方法。关于 Spring 的生命周期,笔者在《精通 Spring 2.x—企业应用开发精解》第 3 章进行了详细的描述,有兴趣的读者可以查阅。

JSR-250 为初始化之后/销毁之前方法的指定定义了两个注释类,分别是 @PostConstruct 和 @PreDestroy,这两个注释只能应用于方法上。标注了 @PostConstruct 注释的方法将在类实例化后调用,而标注了 @PreDestroy 的方法将在类销毁之前调用。


清单 17. 使用 @PostConstruct 和 @PreDestroy 注释的 Boss.java

                
package com.baobaotao;

import javax.annotation.Resource;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class Boss {
    @Resource
    private Car car;

    @Resource(name = "office")
    private Office office;

    @PostConstruct
    public void postConstruct1(){
        System.out.println("postConstruct1");
    }

    @PreDestroy
    public void preDestroy1(){
        System.out.println("preDestroy1"); 
    }
    …
}

 

您只需要在方法前标注 @PostConstruct@PreDestroy ,这些方法就会在 Bean 初始化后或销毁之前被 Spring 容器执行了。

我们知道,不管是通过实现 InitializingBean /DisposableBean 接口,还是通过 <bean> 元素的 init-method/destroy-method 属性进行配置,都只能为 Bean 指定一个初始化 / 销毁的方法。但是使用 @PostConstruct@PreDestroy 注释却可以指定多个初始化 / 销毁方法,那些被标注 @PostConstruct@PreDestroy 注释的方法都会在初始化 / 销毁时被执行。

通过以下的测试代码,您将可以看到 Bean 的初始化 / 销毁方法是如何被执行的:


清单 18. 测试类代码

                
package com.baobaotao;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AnnoIoCTest {

    public static void main(String[] args) {
        String[] locations = {"beans.xml"};
        ClassPathXmlApplicationContext ctx = 
            new ClassPathXmlApplicationContext(locations);
        Boss boss = (Boss) ctx.getBean("boss");
        System.out.println(boss);
        ctx.destroy();// 关闭 Spring 容器,以触发 Bean 销毁方法的执行
    }
}

 

这时,您将看到标注了 @PostConstructpostConstruct1() 方法将在 Spring 容器启动时,创建 Boss Bean 的时候被触发执行,而标注了 @PreDestroy 注释的 preDestroy1() 方法将在 Spring 容器关闭前销毁 Boss Bean 的时候被触发执行。

分享到:
评论

相关推荐

    java @PostConstruct和@PreConstruct注解

    下面将详细介绍这两个注解的使用和作用。 一、@PostConstruct 注解 @PostConstruct 注解是用来修饰一个非静态的 void() 方法的,该方法不能有抛出异常声明。使用 @PostConstruct 注解的方法将在服务器加载 Servlet...

    Spring实战之使用@POSTConstruct和@PreDestroy定制生命周期行为操作示例

    这种使用 `@POSTConstruct` 和 `@PreDestroy` 的方式简化了我们对Bean生命周期的控制,使得我们可以更优雅地处理初始化和销毁逻辑,而无需依赖复杂的回调接口或实现特定的生命周期接口。同时,这种方式也遵循了...

    javax.annotation.jar文件

    spring 注解初始化,初始化开始@postconstruct 对象销毁@predestroy javax.annotation.jar文件

    Spring IOC之方法注入

    总结来说,Spring的IoC方法注入提供了一种灵活的方式来管理和初始化对象,通过`@PostConstruct`和`@PreDestroy`注解,或者实现`InitializingBean`和`DisposableBean`接口,我们可以在对象生命周期的关键点执行特定的...

    Spring Bean的初始化和销毁实例详解

    在本文中,我们详细讲解了Spring Bean的初始化和销毁,包括使用@Bean的initMethod和destroyMethod、JSR-250的@PostConstruct和@PreDestroy注解等多种方式来控制Bean的生命周期。在实际开发中,我们可以根据需要选择...

    14、加载spring启动首先进入的类方法注解1

    本文将详细讨论在Spring中使用`@PostConstruct`和`@PreDestroy`注解以及`InitializingBean`和`DisposableBean`接口来控制Bean的生命周期。 1. **使用@PostConstruct和@PreDestroy注解** `@PostConstruct`注解标记...

    javax.annotation-3.1.2.2-sources.jar.zip

    例如,通过@PostConstruct和@PreDestroy管理对象的生命周期,通过@Resource和@Inject实现依赖注入,通过@ManagedBean简化Java EE应用的配置,以及通过@NotNull进行数据校验,防止空指针异常。 总之,javax....

    spring注解1

    本文将详细讲解Spring中的几个关键注解:`@Autowired`、`@Qualifier`、`@Resource`以及`@PostConstruct`和`@PreDestroy`。 1. `@Autowired` `@Autowired`注解用于自动装配bean,它可以应用在字段、方法或构造器上,...

    Spring注解@Component、@Repository、@Service、@Controller区别.doc

    在这里,我们使用 @PostConstruct 和 @PreDestroy 注解来指定组件的初始化和销毁方法,这样可以在组件的生命周期中执行特定的操作。 @Component、@Repository、@Service、@Controller 等注解是 Spring 框架中常用的...

    Android代码-governator

    @PostConstruct and @PreDestroy. DETAILS Please see the doc at https://github.com/Netflix/governator/wiki BUILDING Governator is built via Gradle (http://www.gradle.org). To build from the command line...

    spring中service生命周期(xml/annotation)

    若要添加初始化和销毁逻辑,我们可以使用`@PostConstruct`和`@PreDestroy`这两个JSR-250注解。`@PostConstruct`标注的方法会在Bean实例化后,所有依赖注入完成后执行;`@PreDestroy`则会在Bean销毁前调用。示例如下...

    Spring注解 - 52注解 - 原稿笔记

    @JsonPropertyOrder , @JsonSerialize , @JsonSetter , @Lazy , @Order , @PathVariable , @Pointcut , @PostConstruct , @PostMapping , @PreDestroy , @Primary , @PropertySource , @Qualifier , @Repository , ...

    Spring bean初始化及销毁你必须要掌握的回调方法.docx

    类似于@PostConstruct,@PreDestroy是Java的JSR-250规范的一部分,用于标记一个方法,在Bean即将被销毁之前调用。 2. **DisposableBean接口** 如果Bean实现了DisposableBean接口,那么它必须重写`destroy()`方法...

    Spring Bean初始化及销毁多种实现方式

    Spring 提供了多种不同的方式来初始化和销毁 Bean,这些方式包括 init-method/destroy-method、InitializingBean/DisposableBean、@PostConstruct/@PreDestroy 和 ContextStartedEvent/ContextClosedEvent 等。...

    开源框架面试专题及答案.pdf

    Spring Bean 的生命周期 &gt; Spring Bean 的生命周期简单易懂。在一个 bean 实例被初始化时,需要执行一系列的初 始化操作以达到可用的状态。同样的,当一个 bean 不在被调用...&gt; @PostConstruct 和@PreDestroy 注解方式

    spring4框架系列 [ 5 ]

    本部分主要关注以下五个关键注解:`@Component`、`@Value`、`@Resource`、`@Autowired`以及生命周期方法注解`@PostConstruct`和`@PreDestroy`。 1. **`@Component`**:这个注解是Spring中的基础组件注解,用于标记...

    计算机二级java资料.pdf

    @PreDestroy注解的方法则在Session Bean的实例将被EJB容器销毁之前调用,用于释放可能占用的资源,如关闭数据库连接,确保内存的高效使用和避免资源泄漏: ```java @PreDestroy public void cleanUp() { // 释放...

    Spring的自动扫描注入.docx

    在 Spring 框架中,可以使用 @PostConstruct 和 @PreDestroy 注解来指定初始化和销毁方法。例如: @PostConstruct public void init() { } @PreDestroy public void destory() { } Spring 的自动扫描注入机制可以...

Global site tag (gtag.js) - Google Analytics