@DependsOn用于子类

时间:2018-10-09 12:32:15

标签: java-ee java-ee-7 ejb-3.2

@DependsOn可用于确保一个EJB在另一个EJB之前被初始化:

@Startup @Singleton
public class SchemaMigration {
    // ...
}

@DependsOn("SchemaMigration")
public class Crud<E extends BaseEntity> {
    // ...
}

我想知道子类是否也隐式继承此约束?

@Startup @Singleton
public class Birds extends Crud<Bird> {
    // ...
}

@Startup @Singleton
public class Frogs extends Crud<Frog> {
    // ...
}

我知道普通的Java注释不会被继承,但是Java EE会更改某些注释的规则。但是我还没有找到有关@DependsOn批注的具体信息。

1 个答案:

答案 0 :(得分:1)

DependsOn不能确保一个EJB在另一个EJB之前被初始化。

请参阅DependsOn Javadoc

  

容器确保在调用单例的PostConstruct方法之前已初始化与单例具有DependsOn关系的所有单例Bean。

这仅适用于使用引用的单例的ejb名称的单例EJB的具体实例。

关于会话bean的继承,EJB规范(4.9.2.1)说:

  

允许会话bean类具有本身就是会话bean类的超类。但是,对于这种情况,没有适用于注释或部署描述符处理的特殊规则。为了处理特定的会话Bean类,所有超类的处理都是相同的,而不管这些超类本身是否为会话Bean类。在这方面,将会话bean类用作超类仅表示实现继承的一种方便用法,而没有组件继承的语义。