Spring AOP中的NamedParameterJdbcTemplate和CGlib

时间:2014-11-21 10:16:25

标签: java spring spring-mvc spring-aop cglib

大家好我在我的Spring应用程序中使用了AutoWired NamedParameterJdbcTemplate。

@Autowired
    NamedParameterJdbcTemplate namedParametersJdbcTemplate;

在我的rest-servlet.xml

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/mylfrdb"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-arg ref="dataSource"/>
    </bean>
 <bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" id="namedParameterJdbcTemplate">  
   <constructor-arg ref="jdbcTemplate"></constructor-arg> 

</bean> 

<bean class="org.springframework.jdbc.core.simple.SimpleJdbcCall" id="simpleJdbcCall">  
   <constructor-arg ref="dataSource"></constructor-arg>
</bean>

工作正常。 不,我必须使用Spring AOP的性能拦截器。

所以我在rest-servlet.xml中添加了以下内容

<aop:config >

<aop:pointcut expression="@target(org.springframework.stereotype.Service)" id="allServices"/>

<aop:advisor pointcut-ref="allServices" advice-ref="perfMonitor"/>


</aop:config>

所以我得到这样的错误。 无法将org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate字段com.lfr.dao.impl.FlatAdvertiseDaoImpl.namedParametersJdbcTemplate设置为com.sun.proxy。$ Proxy15

所以我提到了这个问题并试图通过使用CGLIB和

来实现第二个解决方案
<aop:config proxy-target-class="true" >

不,我收到此错误

无法生成类[class org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate]的CGLIB子类:此问题的常见原因包括使用最终类或不可见类;嵌套异常是java.lang.IllegalArgumentException:Superclass没有null构造函数但没有给出参数

1 个答案:

答案 0 :(得分:2)

我有完全相同的错误消息。我使用的是Spring 3.2.5.RELEASE版本。经过调试并试图用PetClinic重复问题的例子出来之后就出现了Spring版本的问题。这个问题在Spring 4.1.1中没有发生。尝试升级,也许它有效。