Работает ли @Asynchronous в абстрактном классе? - PullRequest
4 голосов
/ 07 октября 2019

У меня есть абстрактный класс с абстрактным методом

@Asynchronous
public abstract void runAsync();

Я нашел этот ответ для @Async весной Async не работает с абстрактным методом суперкласса контроллера

Вопрос в том, будет ли этот метод runAsync асинхронным, если я переопределю его в реализации? Или мне нужно сделать @Asynchronous аннотацию только в реализации?

1 Ответ

3 голосов
/ 07 октября 2019

Аннотации не наследуются по умолчанию . Аннотации будут наследоваться только в том случае, если в определении аннотации есть @Inherited свойства. Теперь рассмотрим определение аннотации @Async: аннотация

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Async 

Async не имеет свойств @Inherited, поэтому она не будет наследоваться подклассу. В этом случае вам нужно явно указать @Async в методе переопределения подкласса, чтобы он работал. Для получения дополнительной информации, пожалуйста, посетите ссылку .

РЕДАКТИРОВАТЬ: javax.ejb.Asynchronous также не имеет @Inherited свойство ( документы )

@Target(value={METHOD,TYPE})
 @Retention(value=RUNTIME)
public @interface Asynchronous

Таким образом, в случае @Asynchronous поведение в случае переопределения метода с помощью @Asynchronous будет таким же, как упомянуто выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...