私はこのSpring設定を持っています:
<bean id="boo" class="com.x.TheClass"/>
クラスTheClass
はTheInterface
を実装します。次に、これがあります(仮想)Javaコード:
@Autowired
TheInterface x;
@Autowired
TheClass y;
TheInterface
の自動配線は機能しますが、TheClass
の自動配線は失敗します。 SpringはクラスのNoSuchBeanDefinitionException
を提供します。
クラスではなくインターフェースを配線できるのはなぜですか?
通常、両方が機能し、インターフェイスまたはクラスを自動配線できます。
おそらくコンテキストのどこかに自動プロキシジェネレーターがあり、生成されたプロキシオブジェクトでboo
Beanをラップしています。このプロキシオブジェクトはTheInterface
を実装しますが、TheClass
ではありません。自動プロキシを使用する場合は、実装ではなくインターフェイスにプログラムする必要があります。
可能性の高い候補は、トランザクションプロキシです。AspectJまたは@Transactional
?