这是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{
@Override
public Object postProcessAfterInitialization(Object target, String beanName)
throws BeansException {
return target;
}
@Override
public 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"
class="org.frame.base.annotation.support.EhCacheFactoryBean" 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" class="org.frame.base.annotation.support.EhCacheBeanPostProcessor" />
</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));
具体的注解代码,请查看上一节。