如何仅针对给定范围触发注释

时间:2019-07-09 08:57:15

标签: java spring scope annotations aop

在我的应用程序中,我定义了一个自定义注释:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface CreateOrUpdateModule {
}

然后将其用于我的方面:

@Aspect
@Component
@AllArgsConstructor
public class CreateOrUpdateAspect {

    private final CreateOrUpdateModuleCollector collector;

    @AfterReturning(pointcut = "@annotation(com.test.app.aspect.CreateOrUpdateModule)", returning = "entity")
    public void addReturnedModuleToCollection(ModularContent entity) {
        // do sth
    }
}

我叫CreateOrUpdateModuleCollector的类是具有请求范围的bean:

@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class CreateOrUpdateModuleCollector {
    // some methods
}

现在在开发过程中,我遇到了一种情况,其中使用我的自定义@CreateOrUpdateModule注释进行注释的方法之一是通过cron interval从我的应用程序中触发的(通过不同的方法)。现在,我知道可以将ardard的范围设置为request,但这不是我的梦想解决方案。我想知道我的案件是否还有其他方法?我在考虑两种解决方案,但我不知道它们是否可行:

  1. 仅在@CreateOrUpdateModule范围内触发request注释
  2. 使CreateOrUpdateAspect仅在request范围内被触发

还是我没有看到其他解决方案?

0 个答案:

没有答案