我在spring上下文文件'applicationContext.xml'中定义了一个bean,如下所示:
<bean id="daoBean" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.xxx.DAOImpl" />
</bean>
在我的服务类(ServiceImpl)中,我正在使用这个 bean,如下所示:
@Component("serviceImpl")
public class ServiceImpl{
// other code here
@Autowired
private transient DAOImpl daoBean;
// other code here
}
正在从我的 JUnit 测试类访问我的服务类。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/applicationContext.xml" })
public class JUnitTest{
// other code here
@Autowired
private transient ServiceImpl serviceImpl;
// test cases are here
}
当我执行测试用例时,它给出了错误提示:
创建名为“ServiceImpl”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有瞬态 com.xxx.DAOImpl
当我从服务类中删除 @Autowired 并使用 @Resource(name = "daoBean") 时,测试用例工作正常。
public class ServiceImpl{
// other code here
@Resource(name = "daoBean")
private transient DAOImpl daoBean;
// other code here
}
我的问题是为什么@Autowired 在这种情况下不起作用?我是否需要使用@Autowired 配置其他任何东西,以便它可以正常工作。我不想更改我的服务层类以将@Autowired 替换为@Resource。