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