2012-07-17 13 views
7

私はHibernateDaoSupportを拡張するスプリングビーンを持っています。私はこのBeanを私のControllersに注入したいが、私はそれがどんなインターフェースも実装したくない。私はちょうど私のコードの残りの部分から具体的なクラスを参照したい(おそらくAopProxyを使用しない?)誰もこれを行う方法がありますか?インタフェースなしのSpring Beanクラスを定義したい

<bean id="mySampleService" class="com.sample.MySampleService"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

@Autowired 
private MySampleService mySampleService; 

... getters and setters .... 

私はそれがインターフェイスを使用することをお勧めします知っている、それはのIoCの全体のポイントですが、私はインターフェイスを使用することをお勧めしないでください。

+0

問題が何ですか。 – axtavt

+0

現在、あなたはインターフェースを使用することを強要されていますか? –

+0

良い点axtavt(とAdam) - java.lang.ClassNotFoundException:MySampleServiceを与えますが、クラスは絶対にあります。それは、私がプロジェクトから対応する "MySampleInterface"を削除したときに初めてそれを与え始めた.... – fandang

答えて

10

クラスがプロキシする場合は、(InitializingBeanはあなたのケースでHibernateDaoSupportによって実装される)任意のインターフェイスを実装し、デフォルトでは春はJDKの動的プロキシに基づいてプロキシ戦略を使用しています。

したがって、型MySampleServiceのフィールドに注入できないInitializingBeanのプロキシが作成されます。

インターフェイスを使用しない場合は、<tx:annotation-driven>proxy-target-class = "true"と指定して、トランザクションアスペクトで使用する戦略を上書きできます。

を参照:

+2

また、具体的なクラスをfinalにしないでください。そうしないと、このようにプロキシを行うことができなくなります。 – Matt

+1

axtavtありがとう、それは働いた:)豆は今そこにあり、nullではなく、私が望んでいたことは、決してそのtx:annotation属性を考え出したことはありません! – fandang

+0

とAlf [here](http://stackoverflow.com/questions/8922135/why-always-have-single-implementaion-interfaces-in-service-and-dao-layers)に記載されているように、コンストラクタが空であることを確認してください) –

0

あなたは、あなたがインターフェイスを記述する必要はありません、豆としてXMLでマッピングされたコントローラを含むすべてのものを書くことができます。 それ以外の場合は、注釈を使用することで、それらをプロキシするためのインタフェースを構築する必要があります。

関連する問題