2012-06-07 47 views
1

我用Java 6閱讀了關於DI的一些文檔,我不確定完全理解。我有我要注入服務的下列類:DI與Jav​​a 6?

@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

回答

3

Java 6沒有構建依賴注入,也沒有Tomcat 7 AFAIK。你在想Java EE 6嗎?然後,您必須在Java EE 6兼容應用服務器(如TomEE或GlassFish)中運行代碼。

如果你想留在Tomcat 7中,你可以改爲使用Spring或Guice。

+0

我不想使用額外的庫,似乎Tomcat 7支持Java EE 6.我不認爲這是與tomcat的問題,因爲我添加了依賴關係和JSF工作正常... – Pith

+2

Tomcat doesn' t支持Java EE 6,這就是爲什麼我們構建了TomEE,以填補缺少的部分。 DI就是其中之一。看看這個相關的stackoverflow問題http://stackoverflow.com/a/9199893/190816 –

-1

標註MyServiceImpl與@Named註釋。

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其解釋詳細用法。

+0

我添加beans.xml文件,但它仍然無法工作 – Pith

+0

@pith我編輯我的答案,請閱讀這篇文章。它可能會有所幫助您。 –

+0

謝謝你的文章。我還沒有找到關於CDI的好教程。 – Pith