我刚刚从3.2开始更新到春季4.0.0.RC2但是现在我得到了以下的预期
org.springframework.beans.factory.NoSuchBeanDefinitionException
运行测试时,我的dao类上的。它自动装配PersistenceContext(这是我们自己的泛型类)时失败。
@Repository
public class AccountDaoImpl extends AbstractDao<Account> implements AccountDao {
@Autowired
public AccountDaoImpl(final PersistenceContext<Account> context) {
super(context);
}
...
如果我将版本更改回3.2,一切正常。 4.0中导致此问题的不同之处是什么?
答案 0 :(得分:1)
这很可能是因为您注入的bean使用不同的(比Account
)类型参数声明。
Spring Framework 4现在执行更严格的类型检查。
这是一个说明问题的示例(使用SF 3.2.3.RELEASE进行测试,并使用4.0.0.RC2失败):
@ContextConfiguration(classes=GenericAutowireTest.TestConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class GenericAutowireTest {
public static class MyGenericClass<T> {
}
@Configuration
public static class TestConfig {
@Bean
public MyGenericClass<String> myGenericClass() {
return new MyGenericClass<String>();
}
}
@Autowired
private MyGenericClass<Integer> myObject;
@Test
public void test() {
assertNotNull(myObject);
}
}
以下是关于此新功能的a nice article。
解决方案是为@Autowired
返回类型设置“接受”@Bean
字段类型,例如使它们相同,包括参数化类型。只有这在运行时才有意义。