2012-08-09 106 views
0

我有一個默認的context.xmlSpring AOP的 - 方法調用()不發生

<beans 
xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:security="http://www.springframework.org/schema/security" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd"> 
<!-- some other beans --> 
<bean id="licenseTestingAdvice" class="mypackage.LicenseTestingAdvice" /> 
<bean id="jdbcTemplate" class="mypackage.ProxyFactoryBean"> 
    <property name="interceptorNames"> 
     <list> 
      <idref bean="licenseTestingAdvice" /> 
     </list> 
    </property> 
    <property name="target"> 
     <value>mypackage.JDBCTemplate</value> 
    </property> 
    <property name="proxyTargetClass" value="true" /> 
</bean> 

並有LicenseTestingAdvice.java:

import org.aopalliance.intercept.MethodInterceptor; 
import org.aopalliance.intercept.MethodInvocation; 

import java.lang.reflect.Method; 

public class LicenseTestingAdvice implements MethodInterceptor { 
    @Override 
    public Object invoke(MethodInvocation inv) throws Throwable { 
     Method method = inv.getMethod(); 

     System.out.println(String.format(">> Method %s was called before", method.getName())); 
     inv.proceed(); 
     System.out.println(String.format(">> Method %s was called after", method.getName())); 

     return null; //To change body of implemented methods use File | Settings | File Templates. 
    } 
} 

當我調用execute ()方法的JDBCTemplate類 - 不調用invoke()方法。如何解決這個問題?

回答

0

這個<value>mypackage.JDBCTemplate</value>應該是對bean或內部bean的引用。另外,攔截器名稱應該是bean的名稱,而不是它的引用。類似於:

<bean id="myJdbcTemplate" class="mypackage.JDBCTemplate"/> 
<bean id="jdbcTemplate" class="mypackage.ProxyFactoryBean"> 
    <property name="interceptorNames"> 
     <list> 
      <value>licenseTestingAdvice</value> 
     </list> 
    </property> 
    <property name="target" ref="myJdbcTemplate"/> 
    <property name="proxyTargetClass" value="true" /> 
</bean> 
+0

好的。但是** mypackage.JDBCTemplate **有一個帶有一個參數的構造函數。我還必須將其包含到xml中。該參數是另一個類的實例等等。爲什麼我需要這個? * JDBCTemplate *類的一個實例已經從代碼創建而不使用bean。或者爲了使它工作,我需要使用bean創建一個** JDBCTemaple **實例? :-( – user470214 2012-08-09 09:49:18

相關問題