leisure

          JAVA - exceed,helloworld
          隨筆 - 50, 文章 - 0, 評論 - 11, 引用 - 0
          數據加載中……

          spring method interceptor

          spring method interceptor

          -author: leisure.xu

          首先dao里面有find和save方法,本實例以攔截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()");

               }

          }

          一、新增一個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實現了MethodInterceptor的invoke方法,在這里,MethodInvocation參數可以獲取到getArguments等數據,至于能做什么,你懂的。

          二、Dao跟DaoInterceptor還是沒扯上關系,這時需要修改applicationContext.xml

               原來:

               <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 >

          三、運行看效果!

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

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

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

               dao.save();

          結果:

          invocation modify the return result to 'teacher'

          teacher

          dao: save()

          從結果可以看出invocation攔截了find方法,并且修改了其返回結果,而對象的find方法并沒有執行到。

          該實例引用到的jar包:




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

          主站蜘蛛池模板: 白玉县| 中阳县| 水城县| 江达县| 昆明市| 建瓯市| 高清| 盐城市| 湄潭县| 三河市| 乌拉特后旗| 平遥县| 湖北省| 沙坪坝区| 海门市| 宜都市| 泰宁县| 庄河市| 陇川县| 天全县| 芜湖县| 视频| 昂仁县| 安丘市| 金山区| 江孜县| 增城市| 阳曲县| 蕉岭县| 保亭| 安远县| 思茅市| 内丘县| 济源市| 宜州市| 边坝县| 金塔县| 昌平区| 巩留县| 体育| 金昌市|