我有一个带有抽象方法的抽象类
@Asynchronous
public abstract void runAsync();
我在 Spring Async not working on controller's abstract super class method中找到了
@Async
的答案问题是,如果我在实现中重写它,此方法
runAsync
是否会异步?还是仅在实现中需要做@Asynchronous
批注? 最佳答案
注释是,默认情况下不继承。仅当注释定义中具有@Inherited
属性时,注释才会被继承。现在来看@Async
注释定义:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Async
Async
注释不具有@Inherited
属性,因此不会继承到子类。在这种情况下,您需要在子类重写方法中显式指定@Async
使其起作用。有关更多信息,请访问link。编辑:
javax.ejb.Asynchronous
也没有@Inherited
属性(docs)@Target(value={METHOD,TYPE})
@Retention(value=RUNTIME)
public @interface Asynchronous
因此,在
@Asynchronous
的情况下,用@Asynchronous
覆盖方法的情况下的行为将与上述相同。