`

通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

阅读更多

关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种:

第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

第二种是:通过 在xml中定义init-method 和  destory-method方法

第三种是: 通过bean实现InitializingBean和 DisposableBean接口

 

下面演示通过  @PostConstruct 和 @PreDestory

1:定义相关的实现类:

 

[java] view plaincopy
 
  1. package com.myapp.core.annotation.init;  
  2.   
  3. import javax.annotation.PostConstruct;  
  4. import javax.annotation.PreDestroy;  
  5.   
  6. public class PersonService {  
  7.     
  8.     private String  message;  
  9.   
  10.     public String getMessage() {  
  11.         return message;  
  12.     }  
  13.   
  14.     public void setMessage(String message) {  
  15.         this.message = message;  
  16.     }  
  17.       
  18.     @PostConstruct  
  19.     public void  init(){  
  20.         System.out.println("I'm  init  method  using  @PostConstrut...."+message);  
  21.     }  
  22.       
  23.     @PreDestroy  
  24.     public void  dostory(){  
  25.         System.out.println("I'm  destory method  using  @PreDestroy....."+message);  
  26.     }  
  27.       
  28. }  


2:定义相关的配置文件:

 

 

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4. xmlns:context="http://www.springframework.org/schema/context"  
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  7. http://www.springframework.org/schema/context  
  8. http://www.springframework.org/schema/context/spring-context-3.1.xsd">  
  9.   
  10. <!-- <context:component-scan  base-package="com.myapp.core.jsr330"/> -->  
  11.   
  12. <context:annotation-config />  
  13.   
  14. <bean id="personService" class="com.myapp.core.annotation.init.PersonService">  
  15.   <property name="message" value="123"></property>  
  16. </bean>  
  17.   
  18. </beans>  


其中<context:annotation-config />告诉spring 容器采用注解配置:扫描注解配置;

 

测试类:

 

[java] view plaincopy
 
  1. package com.myapp.core.annotation.init;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. public class MainTest {  
  7.       
  8.     public static void main(String[] args) {  
  9.           
  10.         ApplicationContext  context = new ClassPathXmlApplicationContext("resource/annotation.xml");  
  11.           
  12.         PersonService   personService  =  (PersonService)context.getBean("personService");  
  13.           
  14.         personService.dostory();  
  15.     }  
  16.   
  17. }  


测试结果:

 

I'm  init  method  using  @PostConstrut....123
I'm  destory method  using  @PreDestroy.....123

 

其中也可以通过申明加载org.springframework.context.annotation.CommonAnnotationBeanPostProcessor

类来告诉Spring容器采用的 常用 注解配置的方式:

只需要修改配置文件为:

 

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4. xmlns:context="http://www.springframework.org/schema/context"  
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  7. http://www.springframework.org/schema/context  
  8. http://www.springframework.org/schema/context/spring-context-3.1.xsd">  
  9.   
  10. <!-- <context:component-scan  base-package="com.myapp.core.jsr330"/> -->  
  11.   
  12. <!-- <context:annotation-config /> -->  
  13.   
  14.   
  15. <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />  
  16. <bean id="personService" class="com.myapp.core.annotation.init.PersonService">  
  17.           <property name="message" value="123"></property>  
  18. </bean>  
  19.   
  20.   
  21.   
  22. </beans>  


同样可以得到以上测试的输出结果。

本文来源于:http://blog.csdn.net/topwqp/article/details/8681497

分享到:
评论

相关推荐

    @PostConstruct 和 @PreDestroy 使用

    然而,没有这些文件的具体内容,我们无法深入讨论Infinispan如何利用`@PostConstruct` 和 `@PreDestroy` 进行初始化和销毁操作。 在实际开发中,了解和正确使用这些注解对于确保服务的稳定性和资源的有效管理至关...

    spring容器初始化bean和销毁bean之前进行一些操作的方法

    本文将深入探讨如何在Spring容器初始化Bean和销毁Bean前后执行自定义的操作,以便于进行日志记录、资源清理等任务。 首先,我们需要了解Spring中Bean的生命周期。Bean的生命周期大致分为以下阶段: 1. 实例化:...

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

    在Spring框架中,我们可以使用多种方式来控制Bean的初始化和销毁,以下就Spring Bean的初始化和销毁进行详细的讲解。 一、Bean的初始化 在Spring框架中,我们可以使用多种方式来初始化Bean,下面我们将介绍两种...

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

    `@POSTConstruct` 和 `@PreDestroy` 注解允许我们在Bean初始化完成后执行特定的操作,并在Bean销毁之前执行清理工作。本示例详细介绍了如何在Spring中使用这两个注解来定制Bean的生命周期行为。 首先,让我们了解...

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

    下面将详细介绍如何通过不同方式定义Spring Bean的初始化和销毁回调方法。 **初始化回调方法** 1. **@PostConstruct注解** 这个Java标准注解用于标记一个方法,该方法将在对象完全构造后但在业务逻辑执行前被调用...

    Spring @compenent注解详解

    `@PostConstruct`和`@PreDestroy`注解分别标识初始化和销毁方法,Spring会在Bean实例化后调用`@PostConstruct`方法,在销毁前调用`@PreDestroy`方法。 8. **生命周期回调** 除了初始化和销毁方法,Spring还提供了...

    Spring初始化和销毁的实现方法

    "Spring初始化和销毁的实现方法" Spring框架中,Bean的初始化和销毁是非常重要的两个生命...Spring 中提供了多种实现 Bean 初始化和销毁的方法,开发者可以根据实际情况选择合适的方法来实现 Bean 的生命周期管理。

    Spring实例化Bean顺序

    4. **启动后处理器(BeanPostProcessor)**:这些是特殊类型的Bean,它们在所有常规Bean实例化之后,但初始化之前进行处理。它们的实例化顺序由`@Order`注解决定,或者通过实现`Ordered`接口来控制。 5. **...

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

    同样,如果实现了`org.springframework.beans.factory.DisposableBean`接口,Spring会在销毁Bean时调用`destroy()`方法。 ```java public class PersonService implements InitializingBean, DisposableBean { ....

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

    在上面的例子中,当Spring容器创建`myService` Bean时,会调用`init`方法进行初始化,而在Bean被销毁时调用`destroy`方法进行资源清理。 在转向注解配置之前,我们需要理解Spring的@Component、@Service、@...

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

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

    Spring Bean Lifecycle Control

    1. **初始化阶段**:在这个阶段,Spring会创建Bean的实例,这可以通过`@PostConstruct`注解的方法来标记初始化代码。此外,如果Bean实现了`InitializingBean`接口,Spring会调用`afterPropertiesSet()`方法。另外,...

    bean的生命周期1

    在Spring框架中,Bean的生命周期管理是其核心功能之一,它涉及到Bean的创建、初始化、使用和销毁等各个阶段。以下是对"bean的生命周期1"的详细解释: 1. **指定初始化和销毁方法**: Spring允许我们为Bean定义初始...

    spring注解1

    `@PostConstruct`标注的方法会在bean完全初始化之后、实例可供其他bean使用之前调用,而`@PreDestroy`则会在bean即将被销毁时调用。 通过使用这些注解,我们可以减少XML配置,使代码更简洁,同时也使得依赖关系更加...

    spring bean life cycle

    通过实现`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,可以在Bean初始化前后进行额外的操作。 在Spring容器中,Bean的生命周期管理也支持通过`BeanDefinition`进行定制。例如,...

    Springboot启动扩展点详细总结.docx

    如果一个 Bean 实现了 InitializingBean 接口,Spring 会在实例化后调用 afterPropertiesSet 方法进行初始化。另外,也可以使用 @PostConstruct 注解标记初始化方法,同样会在 Bean 实例化后执行。 6. **...

    浅尝Spring注解开发_Bean生命周期及执行过程.doc

       3.@PostConstruct 和 @PreDestroy 注解 Spring 也支持在方法上使用这些注解来标识初始化和销毁方法。`@PostConstruct` 标记的方法会在所有依赖注入完成后调用,而 `@PreDestroy` 标记的方法会在容器关闭前...

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

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

    spring bean的生命周期测试代码

    4. **容器回调**:在Bean初始化之后,Spring容器可能会调用自己的回调方法,如`BeanPostProcessor`接口实现的`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,允许自定义逻辑进一步...

Global site tag (gtag.js) - Google Analytics