大家帮我看看为什么方法没有被拦截啊,麻烦大家了~~
“aaaaa”能打印出来,但是“看这里”打印不出来package com.test.aop;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;public class AdNodeAOP implements AfterReturningAdvice { public AdNodeAOP() {

} public void afterReturning(Object returnValue, Method method, Object[] args,
Object targetClass) throws Throwable {
String methodName = method.getName();
System.out.println("看这里!"+methodName);
return;
}}
package com.test.manager;public interface AdNodeManager {
    public abstract void addRootNode(String name);
}package com.test.manager.impl;
public void addRootNode(String name){
    System.out.println("aaaaaaa");
}<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">      <bean id="adNodeAOP" class="com.test.aop.AdNodeAOP"/>
     
     <bean id="adNodeAfterReturning" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
         <property name="advice">
             <ref bean="adNodeAOP"/>
         </property>
         <property name="patterns">
             <value>
                 com\.test\.manager\.AdNodeManager\.addRootNode
             </value>
         </property>
     </bean>
     
     <bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
         <property name="beanNames">
             <value>AdNodeManagerImpl</value>
         </property>
         <property name="interceptorNames">
             <list>
                 <value>adNodeAfterReturning</value>
             </list>
         </property>
     </bean>
</beans> 

解决方案 »

  1.   

    <value>AdNodeManagerImpl</value>
    AdNodeManagerImpl没有定义
      

  2.   

    定义了,第三段代码我打错了,不好意思package com.test.manager.impl;
    public class AdNodeManagerImpl implements AdNodeManager {
    public void addRootNode(String name){
        System.out.println("aaaaaaa");
    }
    }
      

  3.   

    我是说在spring的配置文件里面没定义,晕啊
      

  4.   

    <value>
                     com\.test\.manager\.AdNodeManager\.addRootNode
                 </value>
    这个先改为
    <value>
                    addRootNode
                 </value>
    看看
    麻烦吧你的spring配置文件贴全
      

  5.   

    <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
    <value>${jdbc.driverClassName}</value>
    </property>
    <property name="url">
    <value>${jdbc.url}</value>
    </property>
    <property name="username">
    <value>${jdbc.username}</value>
    </property>
    <property name="password">
    <value>${jdbc.password}</value>
    </property>
    </bean> 
    <bean id="AdNodeManagerImpl" class="com.founder.ad.manager.impl.AdNodeManagerImpl">
             <property name="dataSource" ref="dataSource"></property> 
         </bean>
    改成那个还是不行
      

  6.   

    AdNodeManagerImpl的定义不要实现接口AdNodeManager 
      

  7.   


    <bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="proxyTargetClass">
             <value>true</value>
         </property>         
    <property name="beanNames">
                 <value>AdNodeManagerImpl</value>
             </property>
             <property name="interceptorNames">
                 <list>
                     <value>adNodeAfterReturning</value>
                 </list>
             </property>
         </bean>
      

  8.   

    package com.test.manager.impl;
    public class AdNodeManagerImpl  {
    public void addRootNode(String name){
        System.out.println("aaaaaaa");
    }
    }
      

  9.   

    AdNodeManagerImpl 是AdNodeManager 的实现类,里面不止一个方法,不能不实现啊
      

  10.   

    佩服你的不行啦,我帮你写个,自己看看吧
    config.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!--使用依赖注入完成变量值设定-->
    <bean id="HelloWorld" class="com.gc.beanproxy.TestHelloWorld"
    depends-on="date"> <!-- <property name="msg">
    <value>HelloWorld</value>
    </property>


    <property name="date">
    <ref bean="date"/>
    </property>--> </bean> <bean id="date" class="java.util.Date" /> <!--以下是使用Spring AOP实现日志输出的Bean-->
    <bean id="log" class="com.gc.beanproxy.LogAround" /> <bean id="logAdvisor"
    class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
    <property name="advice">
    <ref bean="log" />
    </property>
    <!--只对doAuditing()方法有效-->
    <property name="patterns">
    <value>.*doAuditing.*</value>
    </property>
    </bean> <bean id="timeBook" class="com.gc.beanproxy.TimeBook" /> <!--使用Spring提供的ProxyFactoryBean来实现代理-->
    <bean id="beanNameAutoProxyCreator"
    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <!-- <property name="proxyTargetClass">
    <value>true</value>
    </property> -->
    <property name="beanNames">
    <value>timeBook</value>
    </property>
    <property name="interceptorNames">
    <list>
    <value>logAdvisor</value>
    </list>
    </property>
    </bean>
    </beans>
    --通知定义
    package com.gc.beanproxy;import org.aopalliance.intercept.MethodInterceptor;
    import org.aopalliance.intercept.MethodInvocation;
    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;/**
     * aop方式ProxyFactoryBean代理
     * @author warison
     *
     * Oct 20, 2009
     */
    public class LogAround implements MethodInterceptor {
    private Logger logger = Logger.getLogger(this.getClass().getName()); 
    @Override
    public Object invoke(MethodInvocation mi) throws Throwable {
    // TODO Auto-generated method stub
    logger.log(Level.INFO, mi.getArguments()[0] + " 审核数据开始....");
    try { 

              Object result = mi.proceed();            //返回值即是被调用的方法的返回值           return result;          } finally {            logger.log(Level.INFO, mi.getArguments()[0] + " 审核数据结束....");         }      }    
    }
     
    测试程序:package com.gc.beanproxy;import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;public class TestHelloWorld {
    public static void main(String[ ] args) {         //通过ApplicationContext获取XML ApplicationContext actx=new ClassPathXmlApplicationContext("com/gc/beanproxy/config.xml");  
    // ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");  

    TimeBookInterface timeBookProxy = (TimeBookInterface)actx.getBean("timeBook"); 

    timeBookProxy.doAuditing("张三审核数据");
    timeBookProxy.updateAudit("李四修改数据");
     

    }
    }
    --接口package com.gc.beanproxy;import org.apache.log4j.Level;//针对接口编程public interface TimeBookInterface {       public void doAuditing(String name);
           public void updateAudit(String name) ;
    }--实现类
    package com.gc.beanproxy;public class TimeBook implements TimeBookInterface { public void doAuditing(String name) { 

    //审核数据的相关程序
    System.out.println("==aop审核数据的相关程序==");
    }

    public void updateAudit(String name) { 

    //审核数据的相关程序
    System.out.println("==aop修改数据的相关程序==");
    }
    }
      

  11.   

    一步步看,肯定能看懂!不懂的地方上网一查就哦了。没什么难的,我当初就是这样学spring的。
      

  12.   

    张三审核数据=mi.getArguments()[0]这些就是你方法传递参数
    .doAuditing("张三审核数据"); 
    没看出来吗?
    打印的结果结贴,给分