注入问题(使用 vaadin)
Problems with Injection (Using vaadin)
我是 EJB 和注入的新手...
我目前正在使用带有 CDI 的 Vaadin 框架
我一直在尝试使用注射,但我做不到...
在我的 Vaadin UI class MyVaadinUI 我试过了...
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();
}
}
而且有效!!
但是当我不注入 UserController 时,它不起作用...换句话说,当我实例化 class UserController 时,此 class 中的注入不起作用...
代码无效
CDIUI("")
@SuppressWarnings("serial")
public class MyVaadinUI extends UI {
@Override
protected void init(VaadinRequest request) {
UserController userController = new UserController();
System.err.println("desde controller "+userController.getAll().size());
}
}
有人可以解释一下为什么吗?
谢谢
尼古拉斯
只有在注入的对象中才会注入其依赖项。如果您使用 new
创建对象,则不会注入所有具有 @inject
、@ejb
或 @resource
的字段。
在您的情况下,您可以这样创建 UserController:
UserController userController = new UserController();
所以这个字段不会被注入:
@EJB
IUserDAO userDao;
因此 getAll()
将抛出 NullPointerException。
我在项目中使用 vaadin 和 cdi。我建议对几乎所有事情都使用注入,或者根本不使用注入。我注入了我的用户界面、视图、自己的组件……(并且不使用 new 创建它们)因此可以将 ejb bean 或其他东西注入其中。如果你只是有时使用它,你最终会混合注入和正常对象创建,并且必须将注入的对象传递给你自己实例化的其他对象。在我的另一个项目中发生了这种情况,并且对于未来代码的更改确实存在问题。
我是 EJB 和注入的新手...
我目前正在使用带有 CDI 的 Vaadin 框架
我一直在尝试使用注射,但我做不到...
在我的 Vaadin UI class MyVaadinUI 我试过了...
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();
}
}
而且有效!!
但是当我不注入 UserController 时,它不起作用...换句话说,当我实例化 class UserController 时,此 class 中的注入不起作用...
代码无效
CDIUI("")
@SuppressWarnings("serial")
public class MyVaadinUI extends UI {
@Override
protected void init(VaadinRequest request) {
UserController userController = new UserController();
System.err.println("desde controller "+userController.getAll().size());
}
}
有人可以解释一下为什么吗?
谢谢
尼古拉斯
只有在注入的对象中才会注入其依赖项。如果您使用 new
创建对象,则不会注入所有具有 @inject
、@ejb
或 @resource
的字段。
在您的情况下,您可以这样创建 UserController:
UserController userController = new UserController();
所以这个字段不会被注入:
@EJB
IUserDAO userDao;
因此 getAll()
将抛出 NullPointerException。
我在项目中使用 vaadin 和 cdi。我建议对几乎所有事情都使用注入,或者根本不使用注入。我注入了我的用户界面、视图、自己的组件……(并且不使用 new 创建它们)因此可以将 ejb bean 或其他东西注入其中。如果你只是有时使用它,你最终会混合注入和正常对象创建,并且必须将注入的对象传递给你自己实例化的其他对象。在我的另一个项目中发生了这种情况,并且对于未来代码的更改确实存在问题。