我想知道是否有基于注释的方法来启动弹簧应用程序?
即。替换以下内容:
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
User user = (User)ctx.getBean("user");
user.createUser();
}
使用基于注释的方法获取上下文然后在bean中自动装配?
答案 0 :(得分:3)
我认为你不能这样做,毕竟有人必须理解和处理那个注释。如果Spring尚未初始化,谁会这样做?
答案 1 :(得分:1)
春天有一个anotation:叫@ContextConfiguration
非常有用的测试。
您需要扩展为测试支持(testNG or JUnit
)创建的一个spring抽象类。
(例如AbstractTransactionalTestNGSpringContextTests
tor testNG
或AbstractTransactionalJUnit4SpringContextTests
代表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();
}
}