为什么 Ejb 接口抛出 NullPointerException?

Why Ejb Interface throwing NullPointerException?

我正在从我的测试中调用我的 Ejb bean class.In 测试 class 我在这里 userService 前面使用 static 关键字,因为我正在从静态上下文(从 main 方法)访问 userService。 )

注意: 另外,如果我不在 userService 前面使用 static 关键字,那么我也会遇到同样的错误。

public class Test {

    @Inject 
    private static UserService userService;

    public Test() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String args[]){
        userService.doSomething("hello");
    }

}

我设置了一个 EJB 3 interface/implementation 看起来像这样...

UserService(接口)

package business;

public interface UserService {

    public String doSomething();

}

UserServiceBean(实现)

@Stateless
@Local
public class UserServiceBean implements UserService{

    public UserServiceBean() {
    }

    @Override
    public String doSomething() {
        return "Work done!";
    }

}

当我使用我的测试 class 中的接口调用 UserServiceBean class 的 doSomething 方法 时。它给我这样的错误。

Exception in thread "main" java.lang.NullPointerException
    at test.Test.main(Test.java:17)

请解释为什么会出现此错误。

您收到空指针异常,因为 class 测试中的 userService 是静态的。注入不适用于静态字段。从字段 userService 中删除静态关键字。定义为

 @Inject 
 private  UserService userService;

参考:https://blogs.oracle.com/chengfang/entry/do_s_and_don_ts

参考这个link如何调用服务方法: http://www.coderpanda.com/ejb-stateless-session-bean-example/