第九章 Spring Bean Post 处理器(Spring Framework3.1教程)

BeanPostProcessor接口定义了回调方法你可以实现提供自己的实例化逻辑,依赖解析逻辑等等。你也可以实现一些定制的逻辑在Spring容器完成初始化、配置和实例化bean之后,通过安插一个或多个BeanPostProcessor的实现。

你可以配置多个BeanPostProcessor接口,你可以控制这些BeanPostPorcessor接口的执行顺序通过提供的BeanPostProcessor实现Ordered接口提供order属性。

BeanPostProcessors操作bean(或对象)实例意思是SpringIoC容器初始化bean实例然后BeanPostProcessor接口做它们的事情。

一个ApplicationContext自动的发现任何定义了BeanPostPorcessor接口实现的bean并且注册那些bean为post-processors(后处理程序),由容器适时的时候穿件他们。

示例

如下的例子展示如何在ApplicationConext上下文中,写、注册并使用BeanPostProcessors。

让我们按如下的步骤在Eclipse IDE中创建Spring应用。

步骤 

描述

1

创建一个SpringExample的项目并在src目录下创建com.tutorialspoint包。

2

在Add External JARs选项卡中添加Spring库如在Spring Hello World章节中所讲。

3

在com.tutorialspoint包下创建HelloWorld、InitHelloWorld和MainApp类。

4

在src目录下创建bean的配置文件Beans.xml

5

最后一步在Java类中和Bean配置文件中添加内容,并运行应用。

如下是HelloWorld.java的内容

package com.tutorialspoint;

public class HelloWorld {
    private String message;

    public void init() {
        System.out.println("Bean is going through init.");
    }
    public void destroy() {
        System.out.println("Bean will destroy now.");
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public void getMessage() {
        System.out.println("Your Message:" + message);
    }
}

这是一个十分基础的实现BeanPostProcessor的例子,它会在实例化前和后打印所有bean的名字。你可以实现更复杂的逻辑在实例化bean之前和之后,因为你可以访问bean对象在post processor的两个方法中。

如下是InitHelloWorld源代码:

package com.tutorialspoint;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
    public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

        HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
        obj.getMessage();
        context.registerShutdownHook();
    }
}

如下是含有init和destroy方法的配置文件Beans.xml

 

 

     
          
     

     

 

一旦你完成了源代码的创建和配置文件,运行应用。如果应用一切正常将会输出如下消息:

BeforeInitialization:helloWorld
Bean is going through init.
AfterInitialization:helloWorld
Your Message:Hello World!
Bean will destroy now.






你可能感兴趣的:(Spring)