2016-02-22 31 views
2

在下面的例子中,有沒有辦法避免做一個context.getBean()? testService隨後使用的所有其他bean都會自動裝配。 (這是一個控制檯應用程序)在春天,是否有自動裝配第一個bean的方法?

public class Test { 


     private static ITestService testService; 

     private static ApplicationContext context; 

      public static void main(String[] args) { 

      context = new ClassPathXmlApplicationContext(
        new String[]{"/META-INF/spring/app-context.xml"}); 
      ITestService testService = context.getBean(ITestService.class); 

     } 

} 

我嘗試添加自動裝配註解的ApplicationContext,但它沒有工作。除了它如何知道我的app-context.xml位於何處?

更新:我發現我需要什麼over here

+0

應用程序上下文不是常規bean。實際上這個類包含了所有其他的bean定義。這個類運行'@ Autowired'註釋。所以,如果上下文沒有創建,誰會掃描? –

+1

查看@RunWith(SpringJUnit4ClassRunner.class) –

回答

0

不能調用Bean而無需首先初始化應用程序上下文。 其次在你的情況下,Test類應該是豆本身由春天管理,然後自動線ITestService。 Application context作爲一個容器的目的是管理bean的生命週期,所以你需要首先初始化它,然後它會初始化你在你的xml文件中聲明的所有bean。如果您使用servlet創建Web應用程序,請避免使用getBean方法,您可以避免使用getBean。如果不是,你應該手動處理它。

3

對,你錯過了這裏的一些細節。

下面是Spring如何工作的簡短說明。

1-應用程序上下文以某種方式加載(我們很快就會到達)。加載後,應用上下文將初始化/創建所有定義的bean。這是當bean被注入爲依賴時。在此之後,每當從應用程序上下文中獲取一個bean時,該bean都將被初始化並準備好與所有依賴關係一起進行(考慮到一切都很順利)。

RE第一步,有幾種方法可以自動執行Spring初始化。 一種方法就是你在做什麼,明確地實例化一個。其他方式可以通過context listener以防萬一您在網絡環境中,或者使用@RunWith。 (你可以找到更多here

在你的情況,我相信你正在尋找一個(單位?!?)使用Spring的測試環境,讓您正在尋找的東西像

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration 
public class MyTest { 

    @Autowired 
    private ApplicationContext applicationContext; 

    // class body... 
} 

進一步的細節here

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#testing

0

我同意@Desorder說。當我開始使用@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration時,我曾經讓我的測試用例工作。但是我花了一些時間來了解這兩者在內部工作以及它們的默認配置。

如果您想採取一些不同的方法,並希望嘗試不使用@RunWith和@ContextConfiguration,請查看鏈接 - TUTORIAL: JUNIT @RULE.使用它,您將非常清楚提供了哪些spring xml文件位置。

相關問題