java - 注入(inject)问题(使用 vaadin)

标签 java dependency-injection ejb vaadin7

我是 EJB 和注入(inject)的新手...

我目前正在使用带有 CDI 的 Vaadin 框架

我一直在尝试使用注入(inject),但我做不到......

在我的 Vaadin UI 类 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());

}

}

用户 Controller

@Stateless
public class UserController {

    @EJB
    IUserDAO userDao;

   public List<User> getAll() {

        return userDao.findAll();
    }


}

而且它有效!!

但是当我不注入(inject) UserController 时,它不起作用...换句话说,当我实例化 UserController 类时,此类中的注入(inject)不起作用...

代码不起作用

     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());

    }

}

有人可以解释一下为什么吗?

谢谢

尼古拉斯

最佳答案

只有在注入(inject)的对象中才会注入(inject)其依赖项。如果您使用 new 创建对象,则所有具有 @inject@ejb@resource 的字段都不会被注入(inject)。 在您的情况下,您可以像这样创建 UserController:

UserController userController = new UserController();

因此该字段不会被注入(inject):

@EJB
IUserDAO userDao;

因此 getAll() 将抛出 NullPointerException。

我在项目中使用 vaadin 和 cdi。我建议几乎所有事情都使用注入(inject),或者根本不使用注入(inject)。我注入(inject)我的 uis、 View 、自己的组件...(并且不使用 new 创建它们),因此可以将 ejb beans 或其他东西注入(inject)其中。如果您只是有时使用它,您最终会得到注入(inject)和正常对象创建的混合,并且必须将注入(inject)的对象传递给您自己实例化的其他对象。在我的另一个项目中,这种情况发生了,并且对于 future 代码的更改来说确实存在问题。

关于java - 注入(inject)问题(使用 vaadin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28242861/

相关文章:

java - Jdeveloper vs java/j2ee/js+extjs?

ruby-on-rails - Ruby/Rails 依赖注入(inject)

javascript - AngularJS:缩小后出错

java - WebSphere 6.1 的远程 EJB 查找问题

java - 删除和替换 java 方法

java - 以循环方式返回数字,但带有附加子句

java - EJB/JPA批处理异常管理

jakarta-ee - CDI事务管理: How does @Transactional work?

java - 在 Spring Boot 应用程序 @RestController 中获取信息的哪种模式更好以及如何指定 ANY @Mapping?

android - 使用 Dagger 2 发送数组列表