我使用
Spring framework 3.0.5来构建Web应用程序.我使用@Configuration批注来配置我的域对象,并且一些域对象具有会话范围.当我使用jUnit 4.8.2编写单元测试时,AnnotationConfigWebApplicationContext变量无法获取配置类中定义的bean.
我总是得到以下例外:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'country' is defined
有没有人可以就这个问题给我一些建议?非常感谢!
这是我的配置类,单元测试类,DAO类和域对象类. (我使用注释配置应用程序而不是xml)
配置类:
@Configuration
public class RegionDomainObj
{
/**
* Define City Domain Object bean
*/
@Bean
@Scope("session")
public CityImp city()
{
return new CityImp();
}
/**
* Define City IP Domain Object bean
*/
@Bean
@Scope("session")
public CityIPImp cityIP()
{
return new CityIPImp();
}
/**
* Define Country Domain Object bean
*/
@Bean
@Scope("session")
public CountryImp country()
{
return new CountryImp();
}
/**
* Define Country IP Domain Object bean
*/
@Bean
@Scope("session")
public CountryIPImp countryIP()
{
return new CountryIPImp();
}
/**
* Define Locale Domain Object bean
*/
@Bean
@Scope("session")
public LocaleImp locale()
{
return new LocaleImp();
}
/**
* Define Region Domain Object bean
*/
@Bean
@Scope("session")
public RegionImp region()
{
return new RegionImp();
}
/**
* Define Top Level Domain Domain Object bean
*/
@Bean
@Scope("session")
public TopLevelDomainImp topLevelDomain()
{
return new TopLevelDomainImp();
}
}
测试超级:
@RunWith(SpringJUnit4ClassRunner.class)
public class TestENV
{
protected AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext;
@Before
public void setUp()
{
annotationConfigWebApplicationContext = new AnnotationConfigWebApplicationContext();
annotationConfigWebApplicationContext.refresh();
}
}
单元测试类:
public class CountryDAOTest extends TestENV
{
private ICountryDAO countryDAO;
private ICountry country;
@Before
public void setUpLocalTestENV()
{
this.country = (ICountry) this.annotationConfigWebApplicationContext.getBean("country");
this.countryDAO = (ICountryDAO) this.annotationConfigWebApplicationContext.getBean("crazyamsCountryDAO");
}
/* Test save country */
@Test
public void testSaveCountry()
{
this.country.setCode("AU");
this.country.setName("Australia");
this.countryDAO.save(this.country);
/* ignore the assert functions */
}
}
更新
也许我使这个问题过于复杂,你知道,当我们使用AnnotationConfigApplicationContext时,我们可以使用以下代码来注册bean定义.
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
annotationConfigApplicationContext.register(TestProcessUnitConfig.class, OtherClazz.class);
在我的项目中,我使用带有注释支持的Spring MVC,并使用AnnotationConfigWebApplicationContext而不是AnnotationConfigApplicationContext.
虽然它们非常相似,但AnnotationConfigWebApplicationContext不提供“注册”功能.
我只是想知道是否有另一种方法将bean定义注册到AnnotationConfigWebApplicationContext中.
最佳答案 我想你需要在上下文构造函数中使用你的@Configuration类:
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(RegionDomainObj.class);
或者注册:
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
annotationConfigApplicationContext.register(RegionDomainObj.class);
据我所知,AnnotationConfigWebApplicationContext(带有’Web’)用于JSF的东西.