是否有基于注释的方法来获取spring应用程序上下文?

时间:2012-03-02 22:57:55

标签: java spring

我想知道是否有基于注释的方法来启动弹簧应用程序?

即。替换以下内容:

    public static void main(String[] args) {

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

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

}

使用基于注释的方法获取上下文然后在bean中自动装配?

3 个答案:

答案 0 :(得分:3)

我认为你不能这样做,毕竟有人必须理解和处理那个注释。如果Spring尚未初始化,谁会这样做?

答案 1 :(得分:1)

春天有一个anotation:叫@ContextConfiguration 非常有用的测试。 您需要扩展为测试支持(testNG or JUnit)创建的一个spring抽象类。

(例如AbstractTransactionalTestNGSpringContextTests tor testNGAbstractTransactionalJUnit4SpringContextTests代表JUnit)

然后您只需使用@ContextConfiguration批注(对于Class,接口(包括注释类型)或枚举声明)

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

答案 2 :(得分:0)

您无法避免使用ClassPathApplicationContextXml代码,但可以通过执行以下操作来避免使用ctx.getBean(“user”)。理想情况下,它要求xml扫描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();
    }

}