簡體   English   中英

Spring應用程序有Cglib2AopProxy警告

[英]Spring application has Cglib2AopProxy warnings

在開始我的應用程序時,我收到了許多警告, osaop.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.' 大約十幾個功能。

現在我完全理解基於代理的方面不能應用於最終方法。 但是,我沒有(至少是故意的)嘗試將任何方面編織到JdbcDaoSupport 我懷疑它來自<tx:annotation-driven /> 我可以采取哪些措施來消除這些警告,或者更好的是,將這些類別排除在編織方面?

這很可能是由@Transactional注釋引起的,Spring將DAO包裝在代理中以添加事務行為。

我建議讓你的DAO實現一個接口( 為你的DAO創建和使用一個接口 ),這將允許Spring使用JDK動態代理而不必使用CGLib。

使用CGLIB有一個限制,即無法建議在目標類中標記為final的方法,因為無法覆蓋最終方法(CGLIB在運行時創建目標類的子類),但在使用JDK動態代理的情況下,此限制將消失。

參考

也許您已經擴展了JdbcDaoSupport並添加了@Transactional注釋。

您可以將Cglib2AopProxy記錄器設置為日志級別ERROR以避免警告消息。 例如,如果使用log4j和log4j.properties:

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

您應該使用接口進行依賴注入, 這里此處描述了最常見的原因。

您可以閱讀有關代理機制的文檔,了解您看到此警告的詳細信息。

並且請投票支持IntelliJ的檢查的功能請求,這可以幫助我們避免這個警告。 BTW它還包含一個很好的解釋。

Spring Boot現在默認使用CGLIB代理,包括AOP支持。 如果需要基於接口的代理,則需要將spring.aop.proxy-target-class設置為false。

spring.aop.proxy目標級=假

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM