簡體   English   中英

在春季,是否可以自動接線第一個bean?

[英]In spring, is there a way to autowire the first bean?

在下面的示例中,有沒有一種方法可以避免執行context.getBean()? 隨后由testService使用的所有其他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所在的位置?

更新 :我在這里找到了需要的東西

是的,您在這里遺漏了一些細節。

以下是有關Spring如何工作的簡短說明。

1-應用程序上下文以某種方式加載(我們將很快到達那里)。 2-加載后,應用上下文將初始化/創建所有定義的bean。 這是將bean作為依賴項注入的時間。 此后,只要您從應用程序上下文中獲取了一個Bean,該Bean就會全部初始化並准備好使用所有依賴項(考慮到一切都很好)。

RE的第一步,有幾種方法可以使Spring初始化自動化。 一種方法是您在做什么,顯式實例化一種。 其他方式可能是通過上下文偵聽器 (如果您在Web環境中),或者使用@RunWith (您可以在此處找到更多信息

就您而言,我相信您正在尋找在(Unit?!?)測試環境中使用Spring的想法,因此您正在尋找類似的東西

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

    @Autowired
    private ApplicationContext applicationContext;

    // class body...
}

此處有更多詳細信息

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

您必須先初始化應用程序上下文才能調用bean。 其次,在您的情況下, Test類應該是bean本身,由spring管理,然后自動裝配ITestService 應用程序上下文作為容器的目的是管理bean的生命周期,因此您需要首先通過ClassPathXmlApplicationContext對其進行初始化,然后它將初始化您在xml文件中聲明的所有bean。 關於在使用servlet創建Web應用程序時避免使用getBean方法,可以避免使用getBean。 如果沒有,您應該手動處理。

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

如果您想采用其他方法,並且想在沒有@RunWith和@ContextConfiguration的情況下嘗試使用,請查看鏈接- 教程:JUNIT @RULE。 這樣,您將非常清楚提供了哪些spring xml文件位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM