Web サービスへの有効な呼び出しがあります。アノテーションで構成された Spring Bean を使用して Web サービスを呼び出すロジックを実装します。
@ManagedResource(objectName = "bean:name=XServiceMBean")
@Service("xService")
public class XServiceImpl implements XService
{
// working code here
}
テスト目的で、このクラスを拡張し、このクラスの代わりにサブクラスを注入したいので、次のように作成しました。
@ManagedResource(objectName = "bean:name=XServiceMBean")
@Service("xService")
public class XServiceImplTest extends XServiceImpl
{
// working code here
}
スーパークラスの 2 つの注釈行をコメントアウトしました。
春はそれが好きではありません。実行すると、次のようになります。
Error creating bean with name 'xService':Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'xService' must be of type [com.hsc.correspondence.rules.XService], but was actually of type [com.hsc.correspondence.rules.impl.XServiceImplTest]
明示的な「サブクラスに XService を実装する」をもう一度試してみましたが、同じ結果が得られました。
私は春に何か違法なことをしていますか? 元の XServiceImpl には、多数の @Resource アノテーションが含まれています。それが問題になるとは思いませんでした。以前と同じように注射されることを期待していました。
私がやりたいことを行う方法はありますか?それは、オリジナルへの絶対的な変更を最小限に抑えたテストクラスを持っていますか? (私が取り組んでいるプロジェクトでそれらの決定を下さないことを除いて、XML で構成することを検討しますが、私がやろうとしていることには問題があるとは思いませんでした.
追加の困惑: エラー メッセージには、「'xService' という名前の Bean は ...XService 型である必要がありますが、実際には XServiceImplTest 型でした」と表示されます。しかし、XServiceImplTest は XServiceImpl と同じように XService を実装します。
追加の難問 #2: XServiceImpl 全体をクラス XServiceImplTest にコピーし、XServiceImpl の注釈をコメント アウトし、クリーンアップして再構築し、実行しました。同じ結果が得られました。2 つのクラスの唯一の違いは、クラス名です。それはますます見知らぬ人になります。Springがクラス名を気にする理由を誰かが提案できますか?