java – “@inject”的属性保持为空
发布时间:2020-12-15 00:26:41 所属栏目:Java 来源:网络整理
导读:我试图向我的bean注入一个服务,但它总是为空. 我得到以下错误:WELD-001000解决属性userBean对基数null. 一些代码段: 的index.xhtml h:body Hello from Facelets #{userBean.name}/h:body userbean.java package beans;import Domain.User;import java.io.S
我试图向我的bean注入一个服务,但它总是为空.
我得到以下错误:WELD-001000解决属性userBean对基数null. 一些代码段: 的index.xhtml <h:body> Hello from Facelets #{userBean.name} </h:body> userbean.java package beans; import Domain.User; import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.inject.Inject; import javax.inject.Named; import service.UserService; @Named @SessionScoped public class UserBean implements Serializable{ @Inject UserService service; private User user; public UserBean(){ this.user = service.find_user("foo"); } public String getName(){ return "bar"; } } UserService.java package service; import Domain.User; import javax.ejb.Stateless; import javax.inject.Named; @Named @Stateless public class UserService { public UserService(){} public User find_user(String name){ return new User(); } } 解决方法
错误消息可能是一个提示,JVM无法创建UserBean的实例.以下是一些猜测,必须证明:
Dependecy Injection需要一个依赖注入器,一个将UserService实例注入UserBean的工具.在您的代码中,您在实例化bean期间已经使用了此注入的实例:您在构造函数中调用注入的服务. 如果依赖注入器在bean被创建之后启动它,那么对构造函数内的服务的调用会引发一个NullPointerException(因为当时的服务仍然是空的).值得检查一下,尝试在UserBean构造函数中捕获NPE一段时间.如果你抓到一个 – voilà – 依赖注入器在创建bean之后开始运行,因此,在类实例化(=在构造函数中)我们不能使用注入的服务, 解决方法:实现一个小的服务提供者助手类 – 内部类可以工作: public class UserBean implements Serializable { static class UserServiceProvider { @Inject static UserService service; } // ... public UserBean() { this.user = UserServiceProvider.service.findUser("kaas"); } // ... } 未经过测试但可以工作 – 在将其用于bean构造函数之前,应将服务注入到提供者类中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |