以下のように、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: Could not autowire field: private transient 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 に置き換えるためにサービス層クラスを変更したくありません。