我正在使用JEE7,我有一个使用自注射来解决事务性问题的无状态EJB。 当我调用方法 selfMethod 并且它是公共的时,一切正常。如果它是私有的,则注入的组件为空。 我想这与代理模型和自我注入有某种关系,但并不真正理解为什么。
@Stateless
public class AnEjb {
@Inject
@EJB
private AnEjb self;
@Inject
private AClass anObject;
public void normalMethod() {
self.selfMethod();
}
public/private void selfMethod() {
anObject.anyMethod(); // Null pointer exception if selfMethod is private, no problem if it is public
}
}
答案 0 :(得分:1)
EJB API提供了一种自我调用机制:
@Stateless
public class AnEjb {
@Resource
private SessionContext sessionContext;
private AnEjb self;
@PostConstruct
void initialise() {
self = sessionContext.getBusinessObject(AnEjb.class);
}
public void normalMethod() {
self.selfMethod();
}
public void selfMethod() {
anObject.anyMethod();
}
}
请注意,SessionContext.getBusinessObject
方法返回外部客户端将看到的EJB的相同“视图”,因此只能访问其公共方法。