Java 带有自注入EJB的空指针

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

我使用的是JEE7,我有一个无状态EJB,它使用自注入来解决事务性问题。 当我调用方法selfMethod并且它是public时,一切都正常。如果它是私有的,则注入的组件为null。 我猜它与代理模型和自注入有某种联系,但我并不真正理解为什么

@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的相同“视图”,因此只有其公共方法可以访问