Spring_06_Bean的后置处理

Spring - Bean 的后置处理

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

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

BeanPostProcessor可以对bean(对象)实例进行操作,这意味着Spring IOC容器实例化一个bean实例,然后BeanPostProcessor接口进行他们的工作.

ApplicationContext会自动检测由BeanPostProcessor接口实现定义bean,注册这些bean为后置处理器,然后通过在容器中创建bean,在适当的时候调用它.

例子

步骤描述
1创建一个名称为 SpringExample 的项目,并且在创建项目的 c 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("yout message : " + message);
    }

    public void init() {
        System.out.println("Bean is going through init()......");
    }

    private void destroy() {
        System.out.println("Bean will  destroy now  ......");
    }
}

这时实现BeanPostProcessor的非常简单的例子,它在任何的初始化的之前和之后输入该bean的名称.你可以在初始化bean的之前和之后实现更复杂的逻辑,因为你有两个访问内置bean对象的后置处理程序的方法.

这里是InitHelloWorld.java文件内容

package com.tutorialspoint;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class InitHelloWorld implements BeanPostProcessor {

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName)
            throws BeansException {
        System.out.println("BeforeInitialization:"+beanName);
        return bean;
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName)
            throws BeansException {
        System.out.println("AfterInitialization:"+beanName);
        return bean;
    }

}

下面是MainApp.java文件的内容.在这里,你需要注册一个在AbstractApplicationContext类中声明的关闭hook的registerShutdownHook() 方法.它将确保正常关闭,并且调用相关的destroy方法.

MainApp.java

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 version="1.0" encoding="UTF-8"?>
<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-3.0.xsd">

    <bean id="helloWorld" class="com.tutorialspoint.HelloWorld" init-method="init" destroy-method="destroy">
        <property name="message" value="hello ........."></property>
    </bean>
    <bean class="com.tutorialspoint.InitHelloWorld"/>
</beans>

一旦创建源代码和bean配置文件完成后,我们就可以运行该应用程序.如果你的应用程序一切都正常,静输出一下信息.

AfterInitialization:helloWorld
Bean is going through init()......
BeforeInitialization:helloWorld
yout message : hello .........
Bean will  destroy now  ......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值