2012-10-02 77 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数据本身,或者是扩展其中一个的自定义实现。 –

相关问题