web-dev-qa-db-ja.com

Spring Autowiringクラスとインターフェイス?

私はこのSpring設定を持っています:

<bean id="boo" class="com.x.TheClass"/>

クラスTheClassTheInterfaceを実装します。次に、これがあります(仮想)Javaコード:

@Autowired
TheInterface x;

@Autowired
TheClass y;

TheInterfaceの自動配線は機能しますが、TheClassの自動配線は失敗します。 SpringはクラスのNoSuchBeanDefinitionExceptionを提供します。

クラスではなくインターフェースを配線できるのはなぜですか?

41
Marcus Leon

通常、両方が機能し、インターフェイスまたはクラスを自動配線できます。

おそらくコンテキストのどこかに自動プロキシジェネレーターがあり、生成されたプロキシオブジェクトでboo Beanをラップしています。このプロキシオブジェクトはTheInterfaceを実装しますが、TheClassではありません。自動プロキシを使用する場合は、実装ではなくインターフェイスにプログラムする必要があります。

可能性の高い候補は、トランザクションプロキシです。AspectJまたは@Transactional

56
skaffman