Spring中bean注入前后的一些操作:

简介:

InitializingBean 和 DisposableBean

init-method 和 destroy-method

@PostConstruct 和 @PreDestroy

In Spring, InitializingBean and DisposableBean are two marker interfaces, a useful way for Spring to perform certain actions upon bean initialization and destruction.

  1. For bean implemented InitializingBean, it will run afterPropertiesSet() after all bean properties have been set.
  2. For bean implemented DisposableBean, it will run destroy() after Spring container is released the bean.

In Spring, you can use init-method and destroy-method as attribute in bean configuration file for bean to perform certain actions upon initialization and destruction.

Note
The @PostConstruct and @PreDestroy annotation are not belong to Spring, it’s located in the J2ee library – common-annotations.jar.

具体的使用

对于第一个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import  org.springframework.beans.factory.DisposableBean;
import  org.springframework.beans.factory.InitializingBean;
  
public  class  CustomerService  implements  InitializingBean, DisposableBean
{
     String message;
  
     public  String getMessage() {
       return  message;
     }
  
     public  void  setMessage(String message) {
       this .message = message;
     }
  
     public  void  afterPropertiesSet()  throws  Exception {
       System.out.println( "Init method after properties are set : "  + message);
     }
  
     public  void  destroy()  throws  Exception {
       System.out.println( "Spring Container is destroy! Customer clean up" );
     }
  
}

  下面的例子展示了 init-method and destroy-method.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public  class  CustomerService
{
     String message;
  
     public  String getMessage() {
       return  message;
     }
  
     public  void  setMessage(String message) {
       this .message = message;
     }
  
     public  void  initIt()  throws  Exception {
       System.out.println( "Init method after properties are set : "  + message);
     }
  
     public  void  cleanUp()  throws  Exception {
       System.out.println( "Spring Container is destroy! Customer clean up" );
     }
  
}

  

1
2
3
4
5
6
7
8
9
10
11
12
< beans  xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
  
     < bean  id="customerService" class="com.mkyong.customer.services.CustomerService"
         init-method="initIt" destroy-method="cleanUp">
  
         < property  name="message" value="i'm property message" />
     </ bean >
  
</ beans >

  第三种的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import  javax.annotation.PostConstruct;
import  javax.annotation.PreDestroy;
  
public  class  CustomerService
{
     String message;
  
     public  String getMessage() {
       return  message;
     }
  
     public  void  setMessage(String message) {
       this .message = message;
     }
  
     @PostConstruct
     public  void  initIt()  throws  Exception {
       System.out.println( "Init method after properties are set : "  + message);
     }
  
     @PreDestroy
     public  void  cleanUp()  throws  Exception {
       System.out.println( "Spring Container is destroy! Customer clean up" );
     }
  
}

  By default, Spring will not aware of the @PostConstruct and @PreDestroy annotation. To enable it, you have to either register ‘CommonAnnotationBeanPostProcessor‘ or specify the ‘<context:annotation-config />‘ in bean configuration file,

1. CommonAnnotationBeanPostProcessor

1
2
3
4
5
6
7
8
9
10
11
12
< beans  xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
  
     < bean  class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
  
     < bean  id="customerService" class="com.mkyong.customer.services.CustomerService">
         < property  name="message" value="i'm property message" />
     </ bean >
  
</ beans >

  

2. <context:annotation-config />

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
< beans  xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-2.5.xsd">
  
     < context:annotation-config  />
  
     < bean  id="customerService" class="com.mkyong.customer.services.CustomerService">
         < property  name="message" value="i'm property message" />
     </ bean >
  
</ beans >

  


==============================================================================
本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2012/12/27/2835289.html,如需转载请自行联系原作者
相关文章
|
24天前
|
缓存 Java Spring
Spring 框架中 Bean 的生命周期
Spring 框架中 Bean 的生命周期
32 1
|
1月前
|
XML Java 开发者
Spring Boot中的bean注入方式和原理
Spring Boot中的bean注入方式和原理
60 0
|
1天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
1天前
|
Java Spring 容器
Spring注入
Spring注入
21 13
|
9天前
|
Java 数据库连接 开发者
浅谈Spring的Bean生命周期
浅谈Spring的Bean生命周期
17 1
|
13天前
|
XML Java 数据格式
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
19 0
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
|
13天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
23 1
|
24天前
|
XML Java 程序员
作为Java程序员还不知道Spring中Bean创建过程和作用?
作为Java程序员还不知道Spring中Bean创建过程和作用?
14 0
|
28天前
|
XML 缓存 Java
天天用 Spring,bean 实例化原理你懂吗
天天用 Spring,bean 实例化原理你懂吗
17 0
|
1月前
|
Java Spring
Spring5深入浅出篇:bean的生命周期
Spring5深入浅出篇:bean的生命周期