leisure

          JAVA - exceed,helloworld
          隨筆 - 50, 文章 - 0, 評(píng)論 - 11, 引用 - 0
          數(shù)據(jù)加載中……

          spring method interceptor

          spring method interceptor

          -author: leisure.xu

          首先dao里面有find和save方法,本實(shí)例以攔截find方法為主,并改變find的返回值。

          package com.leisure;

          public class Dao {

               public String find() {

                    System. out.println( "dao: find()");

                    return "student";

               }

               public void save() {

                    System. out.println( "dao: save()");

               }

          }

          一、新增一個(gè)DaoInterceptor,如下

          package com.leisure;

          import org.aopalliance.intercept.MethodInterceptor;

          import org.aopalliance.intercept.MethodInvocation;

          /**

           * class description goes here

           * @author leisure.xu

           * @version 1.0.0, 2012 -6 -29

           */

          public class DaoInterceptor implements MethodInterceptor {

               @Override

               public Object invoke(MethodInvocation invocation) throws Throwable {

                    String methodName = invocation.getMethod().getName();

                    if( "find".equals(methodName)) {

                         System. out.println( "invocation modify the return result to 'teacher'");

                         return "teacher";

                    }

                    return invocation.proceed();

               } 

          }

               DaoInterceptor實(shí)現(xiàn)了MethodInterceptor的invoke方法,在這里,MethodInvocation參數(shù)可以獲取到getArguments等數(shù)據(jù),至于能做什么,你懂的。

          二、Dao跟DaoInterceptor還是沒(méi)扯上關(guān)系,這時(shí)需要修改applicationContext.xml

               原來(lái):

               <bean id = "dao" class= "com.leisure.Dao"/>

          修改為:

                    <!--

                <bean id=" dao" class="com.leiusre.Dao"/>

               -->

               <bean id ="daoInterceptor" class="com.leisure.DaoInterceptor"/>

               <bean id ="dao" class= "org.springframework.aop.framework.ProxyFactoryBean" >

                    <property name ="target">

                         <bean class ="com.leisure.Dao" />

                    </property >

                    <property name ="interceptorNames">

                         <list >

                              <value >daoInterceptor </value >

                         </list >

                    </property >

               </bean >

          三、運(yùn)行看效果!

               ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml" );

               Dao dao = context.getBean(Dao. class);

               System. out.println(dao.find());

               dao.save();

          結(jié)果:

          invocation modify the return result to 'teacher'

          teacher

          dao: save()

          從結(jié)果可以看出invocation攔截了find方法,并且修改了其返回結(jié)果,而對(duì)象的find方法并沒(méi)有執(zhí)行到。

          該實(shí)例引用到的jar包:




          posted on 2012-07-11 09:14 leisure 閱讀(1003) 評(píng)論(0)  編輯  收藏 所屬分類: java

          主站蜘蛛池模板: 英德市| 新巴尔虎右旗| 五寨县| 临湘市| 蓝田县| 松滋市| 嘉定区| 南阳市| 定边县| 高邑县| 宜章县| 抚州市| 镇远县| 布尔津县| 泰来县| 泉州市| 保山市| 普兰县| 赤水市| 布尔津县| 吉首市| 大石桥市| 左云县| 盐津县| 胶州市| 马边| 石渠县| 宁德市| 肇庆市| 高陵县| 衡水市| 茂名市| 山阳县| 锡林浩特市| 宕昌县| 馆陶县| 大连市| 盐山县| 赤峰市| 新晃| 化德县|