1

我使用 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

4

3 回答 3

3

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

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

于 2012-06-07T10:16:32.880 回答
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>

阅读这篇文章,它解释了 DI 的详细用法。

于 2012-06-07T10:44:35.093 回答
-1

使用 @Named 注释对 MyServiceImpl 进行注释。

于 2012-06-07T10:13:57.197 回答