隨筆-10  評論-66  文章-1  trackbacks-0

          ???? ?經過這段日子的學習和使用Spring,慢慢地體會到Spring的優妙之處,正在深入地吸收Spring的精華,呵呵。現在寫的這個只是個簡單AOP例子,包括前置通知,后置通知,環繞通知,和目標對象。寫這個例子的主要目標只是想讓想學AOP的能更快地入門,了解一下如何去配置AOP里面的東東。
          目標對象的接口:IStudent.java

          ?1 /**
          ?2 ?*?
          ?3 ? */

          ?4 package ?com.dragon.study;
          ?5
          ?6 /**
          ?7 ?*? @author ?dragon
          ?8 ?*
          ?9 ? */

          10 public ? interface ?IStudent? {
          11 ????
          12 ???? public ? void ?addStudent(String?name);
          13 }

          14


          目標類:StudentImpl.java

          ?1 /**
          ?2 ?*?
          ?3 ? */

          ?4 package ?com.dragon.study.Impl;
          ?5
          ?6 import ?com.dragon.study.IStudent;
          ?7
          ?8 /**
          ?9 ?*? @author ?dragon
          10 ?*
          11 ? */

          12 public ? class ?StudentImpl? implements ?IStudent {
          13
          14 ????? public ? void ?addStudent(String?name) {
          15 ?????????System.out.println( " 歡迎? " + name + " ?你加入Spring家庭! " );
          16 ?????}

          17 }

          18



          前置通知:BeforeAdvice.java

          ?1 /**
          ?2 ?*?
          ?3 ? */

          ?4 package ?com.dragon.Advice;
          ?5
          ?6 import ?java.lang.reflect.Method;
          ?7
          ?8 import ?org.springframework.aop.MethodBeforeAdvice;
          ?9
          10 /**
          11 ?*? @author ?dragon
          12 ?*
          13 ? */

          14 public ? class ?BeforeAdvice? implements ?MethodBeforeAdvice {
          15
          16 ?????? public ? void ?before(Method?method,Object[]?args,?Object?target)
          17 ??????????????? throws ?Throwable {
          18 ??????????
          19 ??????????System.out.println( " 這是BeforeAdvice類的before方法. " );
          20 ??????????
          21 ??????}

          22 }

          23

          后置通知:AfterAdvice.java
          ?1/**
          ?2?*?
          ?3?*/

          ?4package?com.dragon.Advice;
          ?5
          ?6import?java.lang.reflect.Method;
          ?7
          ?8import?org.springframework.aop.AfterReturningAdvice;
          ?9
          10/**
          11?*?@author?dragon
          12?*
          13?*/

          14public?class?AfterAdvice?implements?AfterReturningAdvice{
          15????
          16????public?void?afterReturning(Object?returnValue?,Method?method,
          17???????????????????Object[]?args,Object?target)?throws?Throwable{
          18????????System.out.println("這是AfterAdvice類的afterReturning方法.");
          19????}

          20??????
          21
          22}

          23


          環繞通知:CompareInterceptor.java

          ?1/**
          ?2?*?
          ?3?*/

          ?4package?com.dragon.Advice;
          ?5
          ?6import?org.aopalliance.intercept.MethodInterceptor;
          ?7import?org.aopalliance.intercept.MethodInvocation;
          ?8
          ?9
          10/**
          11?*?@author?dragon
          12?*
          13?*/

          14public?class?CompareInterceptor?implements?MethodInterceptor{
          15
          16??????public?Object?invoke(MethodInvocation?invocation)?throws?Throwable{
          17??????????Object?result?=?null;
          18?????????String?stu_name?=?invocation.getArguments()[0].toString();
          19?????????if?(?stu_name.equals("dragon")){
          20?????????????//如果學生是dragon時,執行目標方法,
          21??????????????result=?invocation.proceed();
          22??????????????
          23?????????}
          ?else{
          24?????????????System.out.println("此學生是"+stu_name+"而不是dragon,不批準其加入.");
          25?????????}

          26????????
          27??????????return?result;
          28??????}

          29}

          30

          配置文件applicationContext.xml
          ?1<?xml?version="1.0"?encoding="UTF-8"?>
          ?2<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">
          ?3
          ?4<beans>
          ?5
          ?6<bean?id="beforeAdvice"?class="com.dragon.Advice.BeforeAdvice"></bean>
          ?7<bean?id="afterAdvice"?class="com.dragon.Advice.AfterAdvice"></bean>
          ?8<bean?id="compareInterceptor"?class="com.dragon.Advice.CompareInterceptor"></bean>
          ?9<bean?id="studenttarget"?class="com.dragon.study.Impl.StudentImpl"></bean>
          10
          11<bean?id="student"?class="org.springframework.aop.framework.ProxyFactoryBean">
          12??<property?name="proxyInterfaces">
          13????<value>com.dragon.study.IStudent</value>
          14??</property>
          15??<property?name="interceptorNames">
          16????<list>
          17?????<value>beforeAdvice</value>
          18?????<value>afterAdvice</value>
          19????<value>compareInterceptor</value>??
          20????</list>
          21??</property>
          22??<property?name="target">
          23????<ref?bean="studenttarget"/>
          24??</property>
          25
          26</bean>
          27
          28
          29
          30
          31</beans>


          ? 現在開始寫測試類,Test.java
          ?1/**
          ?2?*?
          ?3?*/

          ?4package?com;
          ?5
          ?6import?org.springframework.context.ApplicationContext;
          ?7import?org.springframework.context.support.FileSystemXmlApplicationContext;
          ?8
          ?9import?com.dragon.study.IStudent;
          10
          11/**
          12?*?@author?dragon
          13?*
          14?*/

          15public?class?Test?{
          16
          17????/**
          18?????*?@param?args
          19?????*/

          20????public?static?void?main(String[]?args)?{
          21????????//?TODO?Auto-generated?method?stub
          22??????ApplicationContext?ctx?=?
          23??????????new?FileSystemXmlApplicationContext("/com/dragon/applicationContext.xml");
          24??????
          25??????IStudent?person?=?(IStudent)ctx.getBean("student");
          26??????person.addStudent("dragon");
          27??????
          28//??????person.addStudent("javadragon");
          29????}

          30
          31}

          32
          posted on 2006-12-03 03:29 javadragon 閱讀(76773) 評論(59)  編輯  收藏

          評論:
          # re: 一個簡單的Spring的AOP例子 2007-02-22 11:41 | freesky_zh
          這個類public class BeforeAdvice implements MethodBeforeAdvice
          好像有點問題,在Eclipse中會報錯。  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2007-02-28 20:34 | javadragon
          我又試了次,沒有錯呀,如果你的還出現錯誤,
          請你把整個工程發給我試下
          郵箱:newlong@126.com  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2007-03-10 10:54 | weichenggao
          不錯,好例子,不過運行該程序,還需要加入commons-logging.jar
          請大家注意!  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2007-03-24 00:31 | 鳥不生蛋蛋的地方
          Nice,u've done a good job, keep practice, keep thinking, then move forward. God's watching u ,ahahaha~  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2007-03-26 20:25 | javadragon
          Thank you! if you don't guided i to how to program,my program capability can't improve. you give me a importnat thing--thinking.thanks again ! i will become stronger. Sorry for my english.haha  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2007-10-11 13:38 | pcz
          AfterAdvice

          不能在方法執行后 在執行啊!  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2007-10-12 22:06 | javadragon
          有什么問題?  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2007-11-12 18:16 | landon
          good job  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2008-04-16 20:42 | 00?
          好不錯,可以運行,,太需要了,謝謝了,,  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2008-04-20 23:01 | huangzongbai
          我按照你的方法去做了,可是Advice不能調用~`,很是郁悶.  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2008-07-14 16:59 | zuoshaobiao
          不錯 不錯 終于弄出來了。謝謝了、  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2008-07-30 20:36 | Rain
          雖然將Aop這個例子寫的不錯!能很好的將要經常使用的代碼變成一個“方面”
          但是注釋要加強!  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2008-07-30 20:52 | Rain
          在Spring Appactiocontext.xml配置文件;你定義的前置,后置;環繞等通知在配置文件中實現了代理(org.springframework.aop.framework.ProxyFactoryBean)
          以此將通知放入到了原Bean中;這樣才能使原Bean中方法調用時自動執行通知
          這是其一》
          <property name="proxyInterfaces">
          <property name="interceptorNames">
          <property name="target">
          這三個屬性是一定要配置的
          第一是被代理的接口(IStudent)
          第二是通知列表(前置,后置;環繞)上面定義的三個類
          第三是被代理的原Bean(StudentImpl )

            回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2008-08-01 15:08 |
          好不錯,可以運行,,太需要了,謝謝了,請你把整個工程發給我試下
          郵箱:2008-sina@163.com   回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2008-08-27 14:14 | zackey
          @freesky_zh
          因為沒有導入spring.jar  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2008-09-11 10:49 | 啊正
          不錯啊~~~謝謝LZ分享!!!  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2008-09-24 16:13 | wtf110
          我動手做了下,真的好用啊!我感覺明白了點aop!謝謝樓主!!  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2009-02-17 23:59 | anna
          good  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2009-02-18 00:12 | wen
          @Rain
          great, 你的注釋是畫龍點睛一筆阿  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2009-09-30 11:51 | 淡定
          No setter found for property 'target' in class 'org.springframework.aop.framework.ProxyFactoryBean'

          在第22行中出現。我加入了aop包啊。為什么找不到
          22 <property name="target">
          23 <ref bean="studenttarget"/>
          24 </property>

            回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2009-11-05 16:16 |
          運行以后會報異常啊
          Error creating bean with name 'student' defined in file [E:\workspace\aop2\src\applicationContext.xml]: Cannot resolve reference to bean 'studenttarger' while setting bean property 'targer'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'studenttarger' is defined  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2009-11-07 19:49 | dragon
          @濤
          bean id有沒有寫對?
          targer =>target  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2010-02-02 17:19 | Erwin
          博主你好!
          雖然你的博文已經發表很久了,但是經過一番查找比較,我覺得是最好的!
          同時希望能將運行的測試結果貼出來,這樣文章才算完整而且方便其他人的閱讀。
          另:請問能否引用?  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2010-02-10 11:22 | javadragon
          @Erwin
          可以引用。
          最近幾個項目都沒有用spring,過完年如果有空再整理下,主要還是自己懶,呵呵  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2010-03-10 10:42 | 成亟亟
          您好!dragon。
          我剛剛接觸spring,想跑些小例子熟悉熟悉,由于本人比較愚鈍,網上實在是找不到那種step by step的文章,感覺您的文字簡潔明了,可是實在是不清楚該怎樣把這個例子跑在我的eclipse里,可否把您的工程發給我嘞?謝謝!
          scaramouchben@tom.com  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2010-05-03 15:13 | 123
          頂,  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2010-07-20 11:56 | 微風
          我遇到了和一樓一樣的問題,spring.jar包引入了,可還是不行。為什么???  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2010-07-20 16:02 | 微風
          搞點了,少了個這個aopalliance-1.0.jar包  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2010-07-27 12:50 | wangsan
          3q
            回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2010-10-06 20:30 | 查正濱
          代碼沒有任何問題,這個問題我看了好幾天,今天終于解決了,謝謝樓主。  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2011-04-12 15:35 | 啊啊啊
          代碼沒有任何問題,也很簡單明了,謝謝樓主  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2011-04-13 21:37 | 地痞張三
          這個例子很有幫助,謝謝樓主的幸苦勞動  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2011-07-18 14:36 | 產自海南島的驢肉火燒
          小例子很好用,謝謝。  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2011-08-27 09:06 | zhong
          代碼運行,aop的通知代碼沒運行出來呢,也沒報錯  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2011-10-13 16:42 | tesoqop
          可以運行,但是aop的通知代碼沒有運行出來,不知道 為什么。。  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2011-10-13 17:03 | tesoqop
          剛才仔細的又看了一遍,發現是自己搞錯了。
          現在可以啦。afteradvice還沒有運行出來。  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2011-10-17 20:12 | ee
          如果這就算aop 的話 真的是不難  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2011-11-16 16:44 | 塵埃
          不知樓主是否遺忘了這個例子,我看了這個例子后,也運行了,但是我想知道這個程序的運行順序是什么,就是說在哪配置了它的運行順序嗎(我也沒看到啊),為什么就先走before,然后走compareInterceptor,而且這里面怎么去調用impl里的方法的,最后走after?求樓主解答,不勝感激~~  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2011-11-20 19:41 | javadragon
          @塵埃
          執行順序是通過繼承spring的接口before,afterReturning等來實現的,有興趣的話,可以去看下spring aop的源碼  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2012-04-23 15:07 |
          我覺得你這個例子是調用一個方法并打印,如果參數不滿足條件,則不調用方法,和不如直接if,else就可以搞定呢?  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2012-11-16 16:54 | 44
          4444  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2013-03-25 11:12 | haha
          good  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2013-06-03 14:34 | wayne
          最好吧jar包列一下 免得有些人不清楚錯在哪里  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2013-08-27 10:29 | 對方
          @Rain
          <property name="proxyInterfaces"> 這個去掉也可以執行目標方法  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2013-08-28 00:35 | GHF
          GH   回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2013-11-11 15:49 | jki
          @freesky_zh應該還差aopalliance.jar這個jar包  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2014-03-27 18:03 | 凨不止
          我是初學者,可以發工程到我郵箱么835060947@qq.com , /thx感謝  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2014-07-06 21:59 | 飛花一夜
          很贊的入門例子,一次成功!
          ps:這里的編輯器沒有復制功能,太討厭了!  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2014-08-13 15:00 | 你爸
          @javadragon
          煞筆  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2014-08-19 10:26 | France.
          其實我是來學習思想 而不是實現,,呵呵 剛剛學 感覺對aop了解了一點,謝謝樓主  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2014-10-30 14:56 | 游客
          不錯,簡單明了,我個人覺得:如果再注明應該導入的包,會更好。  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2014-12-18 16:39 | king
          spring aop 這樣我嘗試也可以攔截到,不過目前我的項目不是ApplicationContext ctx =
          new FileSystemXmlApplicationContext("etc/applicationContext.xml");

          ServerController p= (ServerController)ctx.getBean("serverController");
          p.test();
          這樣調用,是直接在controller類中@Autowired注入service,通過調用controller的方法,就是沒有攔截到,這是什么原因?  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2015-01-23 10:31 | 1
          中國人說什么洋文 草泥馬@javadragon
            回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2015-04-02 16:58 | Hill
          @king
          貌似不能用注解,不用注解,用樓主的調用方式就可以了  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2015-06-09 16:52 | 雷鋒
          繼承MethodBeforeAdvice出錯, 我的原因是缺少org.aopalliance-1.0.0.jar的包,我是在網上搜的,放進項目后錯誤消失  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2015-07-29 11:54 |
          你這個applicationContext.xml放在哪里 我運行下找不到xml文件   回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2015-11-16 17:08 | 哆啦雷
          @杰
          不要用FileSystemXmlApplicationContext這個包,

          你試試import org.springframework.context.support.ClassPathXmlApplicationContext,

          相應的方法也換成ClassPathXmlApplicationContext("applicationContext.xml")  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子 2015-11-16 17:14 | 哆啦雷
          這是我lib下的幾個,都是極易引發缺包錯誤的包.
          也許有多余的,不過多多益善咯

          commons-logging-1.0.4.jar
          jstl.jar
          spring-webmvc.jar
          spring.jar
          standard.jar  回復  更多評論
            
          # re: 一個簡單的Spring的AOP例子[未登錄] 2016-04-12 21:07 | 111
          @鳥不生蛋蛋的地方
          wo qu,u english is very good.  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 辽宁省| 平山县| 丽江市| 大埔区| 宁远县| 乌苏市| 宁城县| 阳朔县| 扬州市| 高密市| 新闻| 蚌埠市| 祁门县| 雷波县| 剑阁县| 巴青县| 渝北区| 易门县| 灵川县| 临泉县| 永寿县| 云梦县| 安丘市| 乌苏市| 乐平市| 新巴尔虎左旗| 芦山县| 菏泽市| 称多县| 株洲市| 阿合奇县| 姚安县| 吴川市| 图木舒克市| 彝良县| 和静县| 鄂伦春自治旗| 景洪市| 镇沅| 清原| 巴马|