2012-10-02 10 views
11

アプリケーションを起動すると、約12個ほどの機能のためにo.s.aop.framework.Cglib2AopProxy 'Unable to proxy method [public final void org.springframework.jdbc.core.support.JdbcDaoSupport.setDataSource(javax.sql.DataSource)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.'という行に多数の警告が表示されます。SpringアプリケーションにCglib2AopProxyの警告があります

私は、プロキシベースの側面は最終的な方法には適用できないことを完全に理解しています。しかし、私は(少なくとも、少なくとも)JdbcDaoSupportに任意の側面を編み込もうとはしませんでした。私はそれが<tx:annotation-driven />から来ると思う。これらの警告を黙らせるために私ができることはありますか、より良いことに、これらのクラスを編み方から除外することはできますか?

答えて

2

JdbcDaoSupportを拡張し、@Transactional注釈を追加した可能性があります。

警告メッセージを避けるために、Cglib2AopProxyロガーをログレベルERRORに設定できます。例えば、log4jのとlog4j.properties使用している場合:これは最も可能性の高い@Transactional注釈によって引き起こされる

log.logger.org.springframework.aop.framework.Cglib2AopProxy = ERROR 
+4

このようにサイレンシングすることはあまりにも非特異的です。警告自体は非常に役に立つかもしれません。 –

13

を、春には、トランザクションの振る舞いを追加するには、プロキシであなたのDAOをラップします。

DAOにインターフェイス(を作成してDAO用のインターフェイスを作成してください)を実装することをお勧めします。これにより、CGLibを使用する代わりにJDKの動的プロキシを使用できるようになります。 CGLIBを使用

は、最終的なメソッドをオーバーライドすることができないような標的クラスで最終とマークされた方法がお勧めすることができない制限がある(CGLIBは、実行時にターゲットクラスのサブクラスを作成する)が、この制限は、の場合に消滅しますJDKの動的プロキシを使用します。

Reference

+2

質問に記載されているように私はプロキシの問題をよく知っています。しかし、私は 'JdbcDaoSupport'をどこにも使っていません。すべての私のリポジトリ(1つを保存する)はSpringデータを使用するので、とにかくインターフェースでなければなりません。残りのものが犯人かSpring Dataか、あるいはそれらを拡張するカスタム実装かどうかを調べなければなりません。 –

1

あなたは、このための最もな理由がherehereに記載されている、依存性注入のためのインタフェースを使用する必要があります。

この警告が表示される理由については、documentation about proxying mechanicを参照してください。

feature request of inspection for IntelliJに投票してください。この警告は、この警告を避けるのに役立ちます。それはまた、良い説明が含まれています。

+2

私は「あなたは依存性注入のためにインターフェイスを使うべきです」と同意しません。あなたが引用している参考文献は2012年からのものです。 –

関連する問題