让我们说一堂课
@RequestScope
public abstract class A {
int a;
}
和扩展上述类的另一个类
@Service
public class B extends A {
public int getA () { return a; }
}
此类B的变量(它是从A扩展的)是请求范围变量吗?
要成为可继承的注释,必须使用@Inherited
注释进行标记。看一下@RequestScope
的源代码:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Scope(WebApplicationContext.SCOPE_REQUEST)
public @interface RequestScope {
/**
* Alias for {@link Scope#proxyMode}.
* <p>Defaults to {@link ScopedProxyMode#TARGET_CLASS}.
*/
@AliasFor(annotation = Scope.class)
ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS;
}
没有标记为@Inherited
。因此,它不会影响子类。这意味着您示例中的类B
的变量不是请求范围的而是单例的,因为默认情况下它应该是单例的。您可以找到有关预定义批注here的更多详细信息。