Как вызвать аннотацию только для заданной области - PullRequest
0 голосов
/ 09 июля 2019

В моем приложении я определил пользовательскую аннотацию:

@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 (другим способом). Теперь я знаю, что могу установить область действия request, но это не решение моей мечты. Я хотел бы знать, есть ли другой способ для моего случая? Я думал о двух решениях, но я не знаю, возможно ли это:

  1. делает @CreateOrUpdateModule аннотацию, запускаемую только для request scope
  2. сделать CreateOrUpdateAspect только триггером для request scope

Или есть другое решение, которого я не вижу?

...