Java 注射问题(使用vaadin)
我是EJB和注入的新手 我目前正在使用带有CDI的Vaadin框架 我一直在尝试注射,但我没有做到这一点 在我的VaadinUI类中,我尝试了Java 注射问题(使用vaadin),java,dependency-injection,ejb,vaadin7,Java,Dependency Injection,Ejb,Vaadin7,我是EJB和注入的新手 我目前正在使用带有CDI的Vaadin框架 我一直在尝试注射,但我没有做到这一点 在我的VaadinUI类中,我尝试了 CDIUI("") @SuppressWarnings("serial") public class MyVaadinUI extends UI { @EJB UserController userController; @Override protected void init(VaadinRequest request) { System
CDIUI("")
@SuppressWarnings("serial")
public class MyVaadinUI extends UI {
@EJB
UserController userController;
@Override
protected void init(VaadinRequest request) {
System.err.println("desde controller "+userController.getAll().size());
}
}
用户控制器
@Stateless
public class UserController {
@EJB
IUserDAO userDao;
public List<User> getAll() {
return userDao.findAll();
}
}
有人能解释为什么吗
谢谢
Nicolas只有在注入对象中才会注入其依赖项。如果使用
new
all字段创建一个具有@inject
的对象,@ejb
或@resource
将不会被注入。
在您的情况下,您可以像这样创建UserController:
UserController userController = new UserController();
所以这个字段不会被注入:
@EJB
IUserDAO userDao;
因此,getAll()
将抛出NullPointerException
我在项目中使用vaadin和cdi。我建议几乎所有的东西都使用注射剂,或者根本不用。我注入我的UI、视图、自己的组件。。。(并且不要使用new创建它们)这样就可以将ejbbean或其他东西注入到它们中。如果您只是在某些时候使用它,那么最终将是注入和普通对象创建的混合,并且必须将注入的对象传递给您自己实例化的其他对象。在我的另一个项目中,这种情况发生了,并且在以后的代码更改中遇到了问题
@EJB
IUserDAO userDao;