2012-10-02 75 views
11

在開始我的應用程序時,我收到了大量關於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例如:

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

以這種方式沉默是有點太不明確。警告本身可能相當有幫助。 –

13

這很可能是由@Transactional註釋引起的,春天包裝你的DAO在代理添加事務行爲。

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

使用CGLIB具有方法標記爲最終在目標類不能被告知作爲最終的方法不能被覆蓋的限制(CGLIB在運行時創建目標類的子類),但這種限制在的情況下,消失使用JDK動態代理。

Reference

+2

我很清楚代理問題,正如問題所述。但是,我不在任何地方使用'JdbcDaoSupport'。我的所有倉庫(保存一個)都使用Spring Data,因此必須是接口。我必須研究其餘的是罪魁禍首還是Spring數據本身,或者是擴展其中一個的自定義實現。 –

相關問題