【问题标题】:DI with Java 6?DI 与 Java 6?
【发布时间】:2012-06-11 08:12:44
【问题描述】:

我阅读了一些关于 Java 6 DI 的文档,但我不确定是否完全理解。我有以下类,我想在其中注入服务:

@ManagedBean
@RequestScoped
public class MyBean implements Serializable {

    private static final long serialVersionUID = 1L;

    @Inject
    private MyService myService;
    private List<SomeObject> someObjects;

    // Getter and setter

    public List<SomeObject> getSomeObjects() {
        if (someObjects == null) {
            someObjects = myService.find();
        }
        return someObjects;
    }

}

服务:

public class MyServiceImpl implements MyService {

    public MyServiceImpl() {
    }

}

运行此代码时,未注入 myService。请问,我做错了什么?

PS:我使用的是 Tomcat 7

【问题讨论】:

    标签: java dependency-injection java-ee-6 java-6


    【解决方案1】:

    Java 6 没有内置依赖注入,Tomcat 7 AFAIK 也没有。您在考虑 Java EE 6 吗?然后,您必须在与 Java EE 6 兼容的应用服务器中运行您的代码,例如 TomEE 或 GlassFish。

    如果你想继续使用 Tomcat 7,你可以考虑 Spring 或 Guice。

    【讨论】:

    • 我不想使用附加库,而且似乎 Tomcat 7 支持 Java EE 6。我认为这不是 tomcat 的问题,因为我添加了依赖项并且 JSF 工作正常.. .
    • Tomcat 不支持 Java EE 6,这就是我们构建 TomEE 的原因,以填补缺失的部分。 DI就是其中之一。查看这个相关的 stackoverflow 问题stackoverflow.com/a/9199893/190816
    【解决方案2】:

    您只需要在(META-INF/beans.xml 或 WEB-INF/beans.xml)中添加 beans.xml 文件。这是示例 beans.xml 文件,

          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="
                http://java.sun.com/xml/ns/javaee 
                http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
          </beans>
    

    阅读此article,它解释了 DI 的详细用法。

    【讨论】:

    • @pith 我编辑了我的答案,请阅读这篇文章。它可能对你有帮助。
    • 感谢您的文章。我还没有找到关于 CDI 的好教程。
    【解决方案3】:

    使用 @Named 注释注释 MyServiceImpl。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2012-08-12
      • 2021-09-16
      • 1970-01-01
      • 2013-03-21
      • 2019-05-03
      相关资源
      最近更新 更多