2014-09-03 63 views
0
public class SomeClass { 
    @Autowired 
    public WaterContainer wc; 

    private static int count = 0; 

    SomeClass(){ ++count;} 

    public static int testmethod() { 
     return count; 
    } 

    public static void main(String[] args) { 
     ApplicationContext context = new FileSystemXmlApplicationContext("spring-configuration\\beans.xml"); 

     SomeClass obj = context.getBean(SomeClass.class); 
     //SomeClass obj2 = new SomeClass(); 
     System.out.println("value of count "+SomeClass.testmethod()); 
     if(obj.wc != null) 
      System.out.println("wc volume "+obj.wc.getCurrentVolume()); 
     else 
      System.out.println("wc bean "+context.getBean(WaterContainer.class).getCurrentVolume()); //+(obj.wc==null) 
    } 
} 

註解beans.xml的文件包含此: 同時使用Spring的ApplicationContext如下面的例子,是照顧

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean class="com.app.data.SomeClass"/> 
    <bean class="com.app.mechanism.WaterContainer"> 
     <constructor-arg value="30"/> 
    </bean> 

</beans> 

,我得到的產量如下,但我期待的領域SomeClass對象中的wc不能爲null,這是否意味着autowired註釋不被處理?或者我在某個地方出錯了?計數1
WC豆
值30

如果是這樣的話怎麼做
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"file:spring-configuration\\beans.xml"})
單元測試工作?這裏的自動裝配是如何處理的

+0

<上下文:註解的配置/> <上下文:組分掃描基包=「com.app 「/> – MarianP 2014-09-03 13:35:23

+0

如果自動處理註釋取決於所使用的'ApplicationContext'的類型。正如你已經注意到的那樣,你使用的那個不會處理註釋。啓用註釋處理ass''。或者使用'AnnotationConfigApplicationContext'併爲其提供xml文件。 – 2014-09-03 14:24:56

回答

0

As M. Deinum stated,註釋配置內置到某些ApplicationContext實現中,而不是其他配置。

FileSystemXmlConfiguration是沒有內置註釋配置的實現。您可以使用

<context:annotation-config /> 

(以及相關的名稱空間聲明)啓用該註釋配置。

由於該配置未啓用,因此@Autowired字段未處理,您的SomeClass#wc字段留下了null

您內部所示的測試配置使用AnnotationConfigApplicationContext其中註解配置內置

+0

當我在xml中使用標籤時,'wc'對'obj'不爲空,但是當我使用'obj2'時'wc'仍然爲空 – shrewquest 2014-09-04 05:20:38

+0

@shrewquest我假設你的意思是// // SomeClass obj2 = new SomeClass ();'。注意你是如何自己創建對象的。春天並沒有涉及到。 – 2014-09-04 05:22:05

相關問題