@异步在抽象类中工作吗?

问题描述 投票:4回答:1

我有一个带有抽象方法的抽象类

@Asynchronous
public abstract void runAsync();

我在春季@Async中找到了关于Async not working on controller's abstract super class method的答案

问题是,如果我在实现中重写它,此方法runAsync是否将是异步的?还是仅在实现中需要做@Asynchronous注释?

java asynchronous java-ee
1个回答
3
投票

注释是默认未继承。仅当注释定义中具有@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覆盖方法的行为与上述相同。

© www.soinside.com 2019 - 2024. All rights reserved.