首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Annotation兑现缓存,Bean创建代理模式

2012-08-31 
Annotation实现缓存,Bean创建代理模式这是BeanPostProcessor,生成一个代理对象package org.frame.base.ann

Annotation实现缓存,Bean创建代理模式
这是BeanPostProcessor,生成一个代理对象

package org.frame.base.annotation.support;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;import org.frame.base.annotation.intercept.ProxyHandler;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;/** * 使用Ehcache代理来实现缓存拦截  * */public class EhCacheBeanPostProcessor implements BeanPostProcessor{@Overridepublic Object postProcessAfterInitialization(Object target, String beanName)throws BeansException { return target;}@Overridepublic Object postProcessBeforeInitialization(Object target, String beanName)throws BeansException {Class<?>[] interfaceClass = target.getClass().getInterfaces();InvocationHandler handler = new ProxyHandler(target);Object proxyObj = Proxy.newProxyInstance(target.getClass().getClassLoader(),interfaceClass, handler);return proxyObj;}}

配置如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans default-autowire="byName"><!-- annotation intercept--><!-- <bean id="testIano"init-method="init"> <property name="target"><ref bean = "testI"/></property> </bean> --><!-- 原始结构 --><bean id="testI" class ="org.frame.base.annotation.intercept.Test"/><!-- Ehcache拦截,使用代理来实现 --><bean id="beanPostProcessor" /></beans>

测试代码如下:
TestI testI = (TestI) cxt.getBean("testI");int a = 10;int b = 11;System.out.println(testI.add(a, b));System.out.println(testI.add(a, b));System.out.println(testI.xx(a));System.out.println(testI.xx(a));

具体的注解代码,请查看上一节。

热点排行