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>

  

时间: 2024-12-04 21:53:30

Spring中bean注入前后的一些操作:的相关文章

spring入门(4) spring中Bean的生命周期总结

Spring中Bean的生命周期,在学习spring的过程中bean的生命周期理解对学习spring有很大的帮助,下面我就分别介绍在 ApplicationContext和BeanFactory中Bean的生命周期. 1.在ApplicationContext中Bean的生命周期 生命周 期执行的过程如下: 1.需找所有的bean根据bean定义的信息来实例化bean 2.使用依赖注入,spring按bean 定义信息配置bean的所有属性 3.若bean实现了BeanNameAware接口,工

详析Spring中依赖注入的三种方式_java

前言 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. 在Sprin

Spring中Bean的命名问题及ref和idref之间的区别

一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查.   Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean>

【Spring实战】—— 4 Spring中bean的init和destroy方法讲解

本篇文章主要介绍了在spring中通过配置init-method和destroy-method方法来实现Bean的初始化和销毁时附加的操作. 在java中,我们并不需要去管理内存或者变量,而在C或C++中,可以通过new和delete等方式来创建和删除变量或者对象.在Spring中,如果想要对一个bean进行初始化和结束附加一定的操作,则可以使用上述的两个方法来实现. 在介绍这两个方法前,读者需要了解Spring中bean的生命周期,最常使用的两种生命周期是:singleton和prototyp

spring中bean配置和bean注入

1 bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用. 1 bean配置 bean配置有三种方法: 基于xml配置Bean 使用注解定义Bean 基于java类提供Bean定义信息 1.1 基于xml配置Bean  对于基于XML的配置,

Spring中bean的配置

        IOC其实是从我们平常new一个对象的对立面来说的,我们平常使用的对象一般直接使用关键字类new一个对象,坏处很显然,使用new那么就表示当前模块已经不知不觉和new出的对象耦合了,而我们通常都是更高层次的抽象模块调用底层实现模块,这样就产生模块依赖于具体的实现,这与我们JAVA中提倡的面向接口面向抽象编程是相冲突的,而且这样做也带来系统的模块架构问题.很简单的例子,在进行数据库操作的时候,总是业务层调用DAO层,DAO一般采用接口开发,这在一定程度上满足了松耦合,使业务逻辑层不

Spring中bean的基本xml配置

xml   在spring容器内拼凑bean叫作装配.装配bean的时候,你是在告诉容器,需要哪些bean,以及容器如何使用依赖注入将它们配合在一起.    理论上,bean装配可以从任何资源获得,包括属性文件,关系数据库等,但xml是最常见的spring 应用系统配置源.Spring中的几种容器都支持使用xml装配bean,包括:    XmlBeanFactory ,    ClassPathXmlApplicationContext ,    FileSystemXmlApplicatio

Spring中你不知道的注入方式

前言     在Spring配置文件中使用XML文件进行配置,实际上是让Spring执行了相应的代码,例如: 使用<bean>元素,实际上是让Spring执行无参或有参构造器 使用<property>元素,实际上是让Spring执行一次setter方法     但Java程序还可能有其他类型的语句:调用getter方法.调用普通方法.访问类或对象的Field等,而Spring也为这种语句提供了对应的配置语法: 调用getter方法:使用PropertyPathFactoryBean

Spring中bean的scope

Spring容器中的bean具备不同的scope,最开始只有singleton和prototype,但是在2.0之后,又引入了三种类型:request.session和global session,不过这三种类型只能在Web应用中使用. 在定义bean的时候,可以通过指定<bean>的singleton或者scope属性来指定相应对象的scope,例如: <bean id="testMock" class="org.test.javadu.TestMock&