Annotation实现缓存,Bean指定代码缓存类

本文详细介绍了如何通过Ehcache代理实现缓存拦截,包括配置beanPostProcessor、处理缓存定义及实现代码示例。重点突出缓存管理的便捷性和代码的简洁性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


<!-- Ehcache拦截,使用代理来实现 -->
<bean id="beanPostProcessor" class="org.frame.base.annotation.support.EhCacheBeanPostProcessor" >
<property name="beans">
<set>
<value>testI</value>
<value>intabc</value>
</set>
</property>
</bean>



package org.frame.base.annotation.support;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Set;

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{

private Set<String> beans;

public void setBeans(Set<String> beans) {
this.beans = beans;
}

@Override
public Object postProcessAfterInitialization(Object target, String beanName)
throws BeansException {
return target;
}

/**
* will be process the beans define in properties
* if you don't want to define
* you can define the pach model *DAO
* you can define the pach model *Service
* you can define the pach model *Action
* but i sugguest you define
*/
@Override
public Object postProcessBeforeInitialization(Object target, String beanName)
throws BeansException {
if(beans.contains(beanName)){
Class<?>[] interfaceClass = target.getClass().getInterfaces();
InvocationHandler handler = new ProxyHandler(target);
Object proxyObj = Proxy.newProxyInstance(target.getClass().getClassLoader(),
interfaceClass, handler);
return proxyObj;
}else{
return target;
}

}
}


指定代理的类,这样去除缓存很简单,代码不需要更改,只需要从拦截的beans设置里面去掉该beanName,缓存就没了,添加只需要添加该bean定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值