Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring方面对可重复注释的支持?_Java_Spring_Java 8_Aop_Aspectj - Fatal编程技术网

Java Spring方面对可重复注释的支持?

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

我已经创建了一个java8的可重复注释,并希望在调用包含注释的方法之前创建一个方面。当方法被注释一次时,这似乎是可行的,但当我有可重复的注释时,调用失败。我使用的是aspectjrt版本1.8.6。看起来aspect不支持可重复的注释。有解决办法吗

@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)