我有一个带注释方法的类:
@Service
class MessageService{
@AutoWired
MessageDao dao;
public void setDao(MessageDao dao){
this.dao=dao;
}
@Memoize
public void addNode(Message m){
}
@Memoize
public void updateNode(Message m){
}
@Memoize
public List<Message> getMessagesByEntity(String key){
}
}
我需要定义一个方面来执行一些缓存查找/内务活动@Around以上每种方法:
@Around("@annotation(com.spring.aspects.Memoize)")
public Object handledMemoize(ProceedingJoinPoint pjp) throws Throwable
{
.....
......
.....
Object obj = pjp.proceed();
if (args != null)
{
cache.put(Arrays.asList(args), obj);
}
return obj;
}
现在,对于上述每种方法,缓存活动的性质都会有所不同
因此,根据调用的实际方法,我需要方面的行为不同
我怎么做到这一点?
我认为最佳实践是通过以某种方式组合@Memoize和方法名称检查,为每个基础方法提供单独的方面方法。
任何帮助表示赞赏。
答案 0 :(得分:0)
按惯例,您可以为不同类型设置多个切入点,例如
execution(* *.(@Memoize get*)(..)),
execution(* *.(@Memoize add*)(..)), and
execution(* *.(@Memoize update*)(..))
您也可以制作自己的注释,例如@MemoizeRead, @MemoizeUpdate, @MemoizeAdd
,以使切入点更加明确。
或者,您可以使用参数(例如@Cached(type=CacheType.READ)
)创建自定义注释,然后在您的方面使用switch语句。