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