我有这些课程:
@Dependent
public abstract class ClassA{...}
public class ClassB extends ClassA{...}
public class ClassC{
@Inject
private ClassB classB;
}
那么,当classB
的实例被销毁时,classC
实例中注入的classC
实例是否会被销毁?换句话说就是
@Dependent
由子类继承的CDI注释?
答案 0 :(得分:2)
这是CDI 1.0 spec中的相关部分。请注意第二个要点:
假设类X由bean类直接或间接扩展 托管bean或会话bean Y。
如果X使用限定符类型,构造型或拦截器绑定类型Z进行注释,那么当且仅当Z时,Y才会继承注释 声明
@Inherited
元注释,既不是Y也不是 中间类,它是X的子类和Y的超类 声明类型为Z的注释 (此行为由Java语言规范定义。)如果X使用范围类型Z进行注释,则当且仅当Z声明
@Inherited
元注释时,Y才会继承注释 既不是Y也不是任何作为X和a的子类的中间类 Y的超类声明范围类型 (此行为与Java语言中定义的行为不同 说明书)。由X显式声明并由Y从X继承的范围类型 优先于声明或继承的构造型的默认范围 收率
由于@Dependent
伪范围确实具有@Inherited
元注释,因此如果子类或任何中间类都没有范围注释(如示例中所示),则继承范围。< / p>
由于@Dependent
范围是默认范围,因此无论如何都不重要。