怎么才能在百度搜到自己的网站,经典网络营销案例,地宝网招聘信息网,大连百度网站优化转载自 Spring Bean 后置处理器
Spring——Bean 后置处理器
BeanPostProcessor 接口定义回调方法#xff0c;你可以实现该方法来提供自己的实例化逻辑#xff0c;依赖解析逻辑等。你也可以在 Spring 容器通过插入一个或多个 BeanPostProcessor 的实现来完成实例化#xf…转载自 Spring Bean 后置处理器
Spring——Bean 后置处理器
BeanPostProcessor 接口定义回调方法你可以实现该方法来提供自己的实例化逻辑依赖解析逻辑等。你也可以在 Spring 容器通过插入一个或多个 BeanPostProcessor 的实现来完成实例化配置和初始化一个bean之后实现一些自定义逻辑回调方法。
你可以配置多个 BeanPostProcesso r接口通过设置 BeanPostProcessor 实现的 Ordered 接口提供的 order 属性来控制这些 BeanPostProcessor 接口的执行顺序。
BeanPostProcessor 可以对 bean或对象实例进行操作这意味着 Spring IoC 容器实例化一个 bean 实例然后 BeanPostProcessor 接口进行它们的工作。
ApplicationContext 会自动检测由 BeanPostProcessor 接口的实现定义的 bean注册这些 bean 为后置处理器然后通过在容器中创建 bean在适当的时候调用它。
例子
下面的例子显示如何在 ApplicationContext 的上下文中编写注册和使用 BeanPostProcessor。
我们在适当的位置使用 Eclipse IDE然后按照下面的步骤来创建一个 Spring 应用程序
步骤描述1创建一个名称为 SpringExample 的项目并且在创建项目的 src 文件夹中创建一个包 com.tutorialspoint。2使用 Add External JARs 选项添加所需的 Spring 库解释见 Spring Hello World Example 章节。3在 com.tutorialspoint 包中创建 Java 类 HelloWorld、InitHelloWorld 和 MainApp。4在 src 文件夹中创建 Beans 配置文件 Beans.xml。5最后一步是创建的所有 Java 文件和 Bean 配置文件的内容并运行应用程序解释如下所示。
这里是 HelloWorld.java 文件的内容
package com.tutorialspoint;
public class HelloWorld {private String message;public void setMessage(String message){this.message message;}public void getMessage(){System.out.println(Your Message : message);}public void init(){System.out.println(Bean is going through init.);}public void destroy(){System.out.println(Bean will destroy now.);}
}
这是实现 BeanPostProcessor 的非常简单的例子它在任何 bean 的初始化的之前和之后输入该 bean 的名称。你可以在初始化 bean 的之前和之后实现更复杂的逻辑因为你有两个访问内置 bean 对象的后置处理程序的方法。
这里是 InitHelloWorld.java 文件的内容
package com.tutorialspoint;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.BeansException;
public class InitHelloWorld implements BeanPostProcessor {public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println(BeforeInitialization : beanName);return bean; // you can return any other object as well}public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println(AfterInitialization : beanName);return bean; // you can return any other object as well}
}
下面是 MainApp.java 文件的内容。在这里你需要注册一个在 AbstractApplicationContext 类中声明的关闭 hook 的 registerShutdownHook()方法。它将确保正常关闭并且调用相关的 destroy 方法。
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 文件
?xml version1.0 encodingUTF-8?beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdbean idhelloWorld classcom.tutorialspoint.HelloWorldinit-methodinit destroy-methoddestroyproperty namemessage valueHello World!//beanbean classcom.tutorialspoint.InitHelloWorld //beans
一旦你创建源代码和 bean 配置文件完成后我们就可以运行该应用程序。如果你的应用程序一切都正常将输出以下信息
BeforeInitialization : helloWorld
Bean is going through init.
AfterInitialization : helloWorld
Your Message : Hello World!
Bean will destroy now.