17

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.'アプリケーションを起動すると、約12個の関数の行に沿って多数の警告が表示されます。

今では、プロキシベースの側面を最終的なメソッドに適用できないことを完全に理解しています。しかし、私は(少なくとも意図的に)いかなる側面もに織り込もうとはしませんでしたJdbcDaoSupport。私はそれがから来ていると思い<tx:annotation-driven />ます。これらの警告を黙らせるために、またはもっと良いことに、これらのクラスをウィービングの側面から除外するために私ができることはありますか?

4

4 に答える 4

16

これはおそらく@Transactionalアノテーションが原因です。SpringはDAOをプロキシでラップして、トランザクション動作を追加します。

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

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

参照

于 2012-10-02T19:49:06.813 に答える
4

多分あなたは注釈を拡張JdbcDaoSupportして追加しました。@Transactional

Cglib2AopProxy警告メッセージを回避するために、ロガーをログレベルのERRORに設定できます。たとえば、log4jとlog4j.propertiesを使用する場合:

log.logger.org.springframework.aop.framework.Cglib2AopProxy = ERROR
于 2012-10-02T14:03:31.317 に答える
1

依存性注入にはインターフェースを使用する必要があります。これのほとんどの理由は、ここここで説明されています。

この警告が表示される理由の詳細については、プロキシメカニズムに関するドキュメントを参照してください。

そして、この警告を回避するのに役立つ可能性のあるIntelliJの検査の機能要求に投票してください。ところでそれはまた良い説明が含まれています。

于 2015-09-22T11:49:23.160 に答える
1

Spring Bootは、AOPサポートを含め、デフォルトでCGLIBプロキシを使用するようになりました。インターフェイスベースのプロキシが必要な場合は、spring.aop.proxy-target-classをfalseに設定する必要があります。

spring.aop.proxy-target-class = false

于 2019-04-29T09:13:07.897 に答える