0

我有一个带注释方法的类:

@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 和方法名称检查,为每个底层方法使用单独的方面方法。
任何帮助表示赞赏。

4

1 回答 1

0

例如,按照惯例,您可以为不同类型设置多个切入点

execution(* *.(@Memoize get*)(..)),
execution(* *.(@Memoize add*)(..)), and
execution(* *.(@Memoize update*)(..))

您还可以制作自己的注释,例如@MemoizeRead, @MemoizeUpdate, @MemoizeAdd使切入点更明确。

或者,您可以使用参数进行自定义注释,例如@Cached(type=CacheType.READ),然后在您的方面使用 switch 语句。

于 2013-08-28T20:51:20.697 回答