没有XML Spring ApplicationContext

我正在尝试使用和不使用spring xml配置创建项目。

首先,我创建我的xml配置:

       

我创建了我的非XML配置(我不知道是否是正确的基础,因为我不知道如何调用它)

 package br.com.caelum.spring.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import br.com.caelum.stock.ProductManager; import br.com.caelum.stock.dao.MemoryProductDAO; import br.com.caelum.stock.dao.Persistable; import br.com.caelum.stock.model.Product; @Configuration public class AppConfig { @Bean public Persistable memoryProductDAO(){ return new MemoryProductDAO(); } @Bean public ProductManager memoryProductManager(){ return new ProductManager(memoryProductDAO()); } } 

比我创建了一个JUnit测试:

 package br.com.caelum.stock; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import br.com.caelum.stock.model.Product; public class ProductManagerTest { private ProductManager manager; @Test public void testSpringXMLConfiguration() { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml"); manager = (ProductManager) context.getBean("memoryManagerProduct"); Product product = new Product(); product.setDescription("[Book] Spring in Action"); product.setQuantity(10); manager.add(product); assertThat(manager.getProducts().get(0).getDescription(), is("[Book] Spring in Action")); } @Test public void testSpringWithoutXMLConfiguration() { ApplicationContext context = ? } } 

如何注入AppConfig中的配置以执行与testSpringXMLConfiguration类似的测试?

这里的Spring参考指南中有很好的例子: http : //docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-java-instantiating-container

简而言之,你会这样做:

 ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); manager = (ProductManager) context.getBean("memoryManagerProduct"); 

然而,使用Spring进行测试的更好方法是使用弹簧测试支持,详细信息请点击此处 – http://docs.spring.io/spring/docs/current/spring-framework-reference/html/testing.html#集成测试的注解

你可以通过弹簧测试支持做这样的事情:

 @ContextConfiguration(classes = AppConfig.class) @RunWith(SpringJUnit4ClassRunner.class) public class ProductManagerTest { @Autowired private ProductManager manager; @Test public void testSpringXMLConfiguration() { //use the productmanager in a test.. } }