@Dependent CDI注释是否由子类继承?

时间:2016-06-17 09:36:09

标签: java java-ee dependency-injection cdi

我有这些课程:

@Dependent
public abstract class ClassA{...}

public class ClassB extends ClassA{...}

public class ClassC{
  @Inject
  private ClassB classB;
}

那么,当classB的实例被销毁时,classC实例中注入的classC实例是否会被销毁?换句话说就是 @Dependent由子类继承的CDI注释?

1 个答案:

答案 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范围是默认范围,因此无论如何都不重要。