Java 带有自注入EJB的空指针
我使用的是JEE7,我有一个无状态EJB,它使用自注入来解决事务性问题。 当我调用方法selfMethod并且它是public时,一切都正常。如果它是私有的,则注入的组件为null。 我猜它与代理模型和自注入有某种联系,但我并不真正理解为什么Java 带有自注入EJB的空指针,java,jakarta-ee,dependency-injection,proxy,Java,Jakarta Ee,Dependency Injection,Proxy,我使用的是JEE7,我有一个无状态EJB,它使用自注入来解决事务性问题。 当我调用方法selfMethod并且它是public时,一切都正常。如果它是私有的,则注入的组件为null。 我猜它与代理模型和自注入有某种联系,但我并不真正理解为什么 @Stateless public class AnEjb { @Inject @EJB private AnEjb self; @Inject private AClass anObject; pub
@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
}
}
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的相同“视图”,因此只有其公共方法可以访问