Java Spring方面对可重复注释的支持?
我已经创建了一个java8的可重复注释,并希望在调用包含注释的方法之前创建一个方面。当方法被注释一次时,这似乎是可行的,但当我有可重复的注释时,调用失败。我使用的是aspectjrt版本1.8.6。看起来aspect不支持可重复的注释。有解决办法吗Java Spring方面对可重复注释的支持?,java,spring,java-8,aop,aspectj,Java,Spring,Java 8,Aop,Aspectj,我已经创建了一个java8的可重复注释,并希望在调用包含注释的方法之前创建一个方面。当方法被注释一次时,这似乎是可行的,但当我有可重复的注释时,调用失败。我使用的是aspectjrt版本1.8.6。看起来aspect不支持可重复的注释。有解决办法吗 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MultiCacheEvicts { MultiCacheEvict[] va
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MultiCacheEvicts
{
MultiCacheEvict[] value();
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(MultiCacheEvicts.class)
public @interface MultiCacheEvict
{
String value();
String[] keyPrefix() default "";
}
@Aspect
public class MultiCacheEvictAdvice
{
@Before("@annotation(multiCacheEvict)")
public void cacheEvict(JoinPoint joinPoint, MultiCacheEvict
multiCacheEvict)
{
//never gets invoked when repeatable annotation present on the method
}
}
/**This works**/
@MultiCacheEvict(value = "default", keyPrefix ={"messageAttributes"})
public void purgeCache(Set<Long> userIds)
/**This doesn't works, advice never gets invoked**/
@MultiCacheEvict(value = "default", keyPrefix ={"messageAttributes"})
@MultiCacheEvict(value = "entity", keyPrefix ={"tagAttributes"})
public void purgeCache(Set<Long> userIds)
@Target(ElementType.METHOD)
@保留(RetentionPolicy.RUNTIME)
public@interface多缓存
{
MultiCacheExit[]值();
}
@目标(ElementType.METHOD)
@保留(RetentionPolicy.RUNTIME)
@可重复(MultiCacheExecutes.class)
公共@接口多缓存逐出
{
字符串值();
字符串[]keyPrefix()默认为“”;
}
@面貌
公共类多缓存建议
{
@在(“@annotation(multicachexecute)”之前
public void cacheexecute(JoinPoint、JoinPoint、multicachexecute
多缓存(逐出)
{
//当方法上存在可重复的注释时,永远不会被调用
}
}
/**这很有效**/
@MultiCacheExit(value=“default”,keyPrefix={“messageAttributes”})
public void purgeCache(设置用户ID)
/**这行不通,建议永远不会被调用**/
@MultiCacheExit(value=“default”,keyPrefix={“messageAttributes”})
@MultiCacheExit(value=“entity”,keyPrefix={“tagAttributes”})
public void purgeCache(设置用户ID)
当您重复注释时,该方法实际上是用换行的MultiCacheReceives注释进行注释的。请尝试将值作为数组添加到注释中,这样您只需指定注释一次。@jbniset:谢谢,这很有效@在(“@annotation(multicachexecutes)”)公共void cacheexecute之前(JoinPoint JoinPoint,multicachexecutes multicachexecutes)