2012-03-02 36 views
2

我想知道是否有基於註釋的方法來啓動一個spring應用程序?是否有基於註釋的方法獲取彈簧應用程序上下文?

即更換此下面:

public static void main(String[] args) { 

    ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml"); 

    User user = (User)ctx.getBean("user"); 
    user.createUser(); 

} 

隨着註解爲基礎的方法用於獲取上下文,然後自動裝配在bean?

回答

0

您無法避免使用該ClassPathApplicationContextXml代碼,但可以通過執行以下操作來避免該ctx.getBean(「用戶」)。理想情況是它要求xml掃描spring想要注入的東西。你唯一不應該在這裏的地方是我已經把我的主類聲明爲Spring組件,因爲Spring註釋在春天認可的類上工作,因此我使得我的主體成爲春季認可的類。無法避免使用ClasspathapplicationContext加載xml。

package com.spring.sample; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import org.springframework.stereotype.Component; 

import com.spring.sample.component.Sample; 

@Component 
public class SampleMain { 

    @Autowired 
    Sample testSample; 

    static ApplicationContext appCtx = new ClassPathXmlApplicationContext("META-INF/webmvc-application.xml"); 

    public static void main(String[] args){ 

     SampleMain sampleMain = appCtx.getBean(SampleMain.class); 
     sampleMain.invokeSample(); 
    } 

    private void invokeSample(){ 
     testSample.invokeSample(); 
    } 

} 
3

我不認爲你能做到這一點,畢竟有人必須理解和處理該註釋。如果Spring還沒有初始化,誰會呢?

1

有春天的anotation:呼籲@ContextConfiguration 測試非常有幫助。 您需要擴展爲測試支持創建的一個彈簧抽象類(testNG or JUnit)。

(例如AbstractTransactionalTestNGSpringContextTests TOR testNGAbstractTransactionalJUnit4SpringContextTests用於JUnit的)

然後,你只需要使用@ContextConfiguration註釋(用於類,接口(包括註釋類型),或枚舉聲明)

junit一些示例代碼測試:

@RunWith(SpringJUnit4ClassRunner.class) 
// ApplicationContext will be loaded from "/applicationContext.xml" and "/applicationContext-test.xml" 
// in the root of the classpath 
@ContextConfiguration(locations={"/applicationContext.xml", "/applicationContext-test.xml"}) 
public class MyTest { 
    // class body... 
} 

請閱讀: http://static.springsource.org/spring/docs/2.5.x/reference/testing.html

相關問題