亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Spring(五)AOP簡述

2019-11-14 23:41:56
字體:
來源:轉載
供稿:網友
SPRing(五)AOP簡述一、AOP簡述

AOP全稱是:aspect-oriented programming,它是面向切面編號的思想核心,

AOP和OOP既面向對象的編程語言,不相沖突,它們是兩個相輔相成的設計模式型

AOP技術彌補了面向對象編程思想的不足,spring aop是實現aop的一種技術,srping aop是spring框架中某個子框架或者子功能所依賴的核心。

SPring的容器并不依賴于AOP

這意味著程序員可以自己選擇是否使用aop技術,aop提供強大的中間件解決方案,這使用spring ioc容器更加的完善

二、一些術語2.1、術語
  • Cross-cutting concern:系統層面上的服務穿插到業務邏輯的處理流程之中
  • Aspect:當需要時,將其放到應用程序之上,不需要時,將其從應用程序中脫離出來
  • Advcie:是Aspect具體的實現,advice包括cross-cutting conerns的行為或者所提供的服務
  • Joinpoint:Aspect在應用程序執行時加入業務流程的時機
  • Pointcut:指定某個aspect在那些joinpoint時被穿插至應用程序之上
  • Target:一個advice被應用的對象或者目標對象
  • Instruction:為已經編寫,編譯完成的類,在執行時期動態的加入一些方法而不用修改或者增加任何代碼
  • Weave:被應用 到對象之上的過程

2.2、Spring對AOP的支持

java語言來編寫

定義pointcutes可以使用配置文件

不支持屬性成員的jointpoints.(spring 設計思想認為支持屬性成員的jointpoints會破壞對象的封裝性)

三、Spring創建Advice3.1、Before Advice

目標對象的方法執行之前被調用

通過實現MethodBeforeAdvice接口來實現

MethodBeforeAdvice 繼承自BeforeAdvice,而BeforeAdvice又繼承Advice接口,before方法會在目標對象target所指定的方法執行之前被調用執行。before返回值為void 沒有返回返回值,在before方法執行完成之后,才開始執行目標對象的方法.

3.2、實例
package com.pb;/** * 接口 * @author Administrator * */public interface IHello {    public void sayHello(String str);    }

package com.pb;/** * 接口實現類 * @author Administrator * */public class Hello implements IHello {    @Override    public void sayHello(String str) {        System.out.println("Hello    "+str);    }}

代理類

package com.pb;import java.lang.reflect.Method;import org.springframework.aop.MethodBeforeAdvice;/** * 在方法執行前調用 * @author Administrator *實現了MethodBeforeAdvcie接口 */public class SayHelloBeforeAdvice implements MethodBeforeAdvice {    @Override    public void before(Method arg0, Object[] arg1, Object arg2)            throws Throwable {        System.out.println("====在方法執行前調用======");    }}

applicationContext.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:p="http://www.springframework.org/schema/p"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!-- 建立目標對象實例 --><bean id="hello" class="com.pb.Hello"/><!--  設定Advice實例--><bean id="sayBeforeAdvice" class="com.pb.SayHelloBeforeAdvice" /><!-- 建立代理對象 --><bean id="hellProxy" class="org.springframework.aop.framework.ProxyFactoryBean"><!-- 設置代理接口 --><property name="proxyInterfaces"><value>com.pb.IHello</value></property><!--  設置目標對象實例--><property name="target"><ref local="hello"/></property><!--  設定Advice實例--><property name="interceptorNames"><list><value>sayBeforeAdvice</value></list></property></bean></beans>

測試類

package com.pb;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * 測試類 * @author Administrator * */public class Test {    public static void main(String[] args) {        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");        IHello iHello=(IHello) context.getBean("hellProxy");        iHello.sayHello("AOP");                    }}

結果:

====在方法執行前調用======Hello    AOP
3.3、After Advice

在目標對象方法執行之后被調用

通過實現AfterReturningAdvice接口來實現

在以上代碼上增加

package com.pb;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;/* * 在方法執行完后調用  * 實現 AfterRetruningAdvice接口 */public class SayAfterAdvice implements AfterReturningAdvice {    @Override    public void afterReturning(Object arg0, Method arg1, Object[] arg2,            Object arg3) throws Throwable {        System.out.println("=========在方法執行完后調用=======");    }}

applicationContext.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:p="http://www.springframework.org/schema/p"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!-- 建立目標對象實例 --><bean id="hello" class="com.pb.Hello"/><!--  設定beforAdvice實例--><bean id="sayBeforeAdvice" class="com.pb.SayHelloBeforeAdvice" /><!-- 設定AfterAdvice實例 --><bean id="sayAfterAdvice" class="com.pb.SayAfterAdvice" /><!-- 建立代理對象 --><bean id="hellProxy" class="org.springframework.aop.framework.ProxyFactoryBean"><!-- 設置代理接口 --><property name="proxyInterfaces"><value>com.pb.IHello</value></property><!--  設置目標對象實例--><property name="target"><ref local="hello"/></property><!--  設定Advice實例--><property name="interceptorNames"><list><value>sayBeforeAdvice</value><value>sayAfterAdvice</value></list></property></bean></beans>

測試類不變,結果:

====在方法執行前調用======Hello    AOP=========在方法執行完后調用=======
3.4、Around Advice

在方法執行之間和之后來執行相應的操作

要實現接口MethodInterceptor接口

package com.pb;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;public class SayAroundAdvice implements MethodInterceptor {    @Override    public Object invoke(MethodInvocation arg0) throws Throwable {        System.out.println("=========在方法執行之前做點事情");        Object result=arg0.proceed();        System.out.println("在方法執行之后做點事情=========");        return result;    }    }

配置文件

<?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:p="http://www.springframework.org/schema/p"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!-- 建立目標對象實例 --><bean id="hello" class="com.pb.Hello"/><!--  設定beforAdvice實例--><bean id="sayBeforeAdvice" class="com.pb.SayHelloBeforeAdvice" /><!-- 設定AfterAdvice實例 --><bean id="sayAfterAdvice" class="com.pb.SayAfterAdvice" /><!-- 設定AroundAdvice實例 --><bean id="sayRoundAdvice" class="com.pb.SayAroundAdvice" /><!-- 建立代理對象 --><bean id="hellProxy" class="org.springframework.aop.framework.ProxyFactoryBean"><!-- 設置代理接口 --><property name="proxyInterfaces"><value>com.pb.IHello</value></property><!--  設置目標對象實例--><property name="target"><ref local="hello"/></property><!--  設定Advice實例--><property name="interceptorNames"><list><!-- <value>sayBeforeAdvice</value><value>sayAfterAdvice</value> --><value>sayRoundAdvice</value></list></property></bean></beans>
3.5、THrowsAdvice

異常發生的時候,通知某個服務對象做處理

實現ThrowsAdvice接口

package com.pb;import java.lang.reflect.Method;import org.springframework.aop.ThrowsAdvice;public class SayThowsAdvice implements ThrowsAdvice {        public void afterThrowing(Method method,Object[] objs,Object target,Throwable ta){        System.out.println("異常發生: "+ta+" 拋出異常的是: "+method);    }}

四、基于XML Schema

簡化代碼實現

容易對應程序進行維護

所有元素都定義在<aop:config>中

五、基于Annotation

以注解的方式對Java普通類進行標注


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲变态欧美另类捆绑| 国产精品一香蕉国产线看观看| 欧美中文在线视频| 亚洲精品suv精品一区二区| 亚洲国产精品久久久久久| 日韩美女av在线免费观看| 在线性视频日韩欧美| 久久五月情影视| 国产成人精品免费久久久久| 宅男66日本亚洲欧美视频| 国产精品69久久久久| 日韩av综合网| 亚洲国产一区二区三区在线观看| 狠狠色狠狠色综合日日五| 91精品国产91久久| 日本人成精品视频在线| 国产精品久久久久久久午夜| 国产精品综合网站| 国产精品高精视频免费| 久久的精品视频| 91精品久久久久久久久久| 欧美成人性色生活仑片| 国产aⅴ夜夜欢一区二区三区| 日韩欧美在线一区| 欧美在线日韩在线| 91精品久久久久久综合乱菊| 91视频免费网站| 亚洲理论在线a中文字幕| 中文字幕一区二区三区电影| 欧美国产高跟鞋裸体秀xxxhd| 国产精品黄页免费高清在线观看| 欧美伊久线香蕉线新在线| 97在线看免费观看视频在线观看| 亚洲第一男人天堂| 国产一区视频在线| 91在线高清免费观看| 欧美孕妇孕交黑巨大网站| 国产一区二区日韩| 久久伊人91精品综合网站| www欧美xxxx| 国产精品盗摄久久久| 中文字幕国产亚洲| 国产在线久久久| 亚洲最大成人在线| 欧美日韩国产中文精品字幕自在自线| 在线观看日韩欧美| 国产噜噜噜噜久久久久久久久| 国产亚洲视频中文字幕视频| 久久久久成人精品| 91在线网站视频| 亚洲三级免费看| 亚洲精品美女在线观看播放| 国产日韩av在线| 国产成人精品免费久久久久| 亚洲精品电影网| 亚洲黄页网在线观看| 精品激情国产视频| 欧美日韩在线视频一区二区| 欧美视频中文在线看| 国产精品福利在线观看网址| 久久91亚洲人成电影网站| 亚洲国产精品久久久久秋霞蜜臀| 91在线免费视频| 国产精品视频精品| 成人亚洲激情网| 国产日韩在线视频| 91在线播放国产| 久久99国产综合精品女同| 97视频免费在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲欧洲日产国码av系列天堂| 97免费视频在线播放| 国产91精品不卡视频| 成人乱色短篇合集| 国产ts一区二区| 国产精品丝袜久久久久久不卡| 亚洲欧美在线看| 91黑丝在线观看| 日产日韩在线亚洲欧美| 欧洲美女免费图片一区| 国内精品国产三级国产在线专| 亚洲第一精品夜夜躁人人爽| 国产精品欧美日韩一区二区| 91免费看片网站| 久久久久久久久久久久久久久久久久av| 国产日韩欧美一二三区| 欧洲亚洲免费在线| 97福利一区二区| 亚洲国产成人精品电影| 欧美黄色片免费观看| 欧美午夜精品久久久久久久| 国产精品丝袜白浆摸在线| 深夜福利亚洲导航| 国产欧美亚洲视频| 成人激情在线播放| 欧美性猛交xxxx乱大交3| 日韩在线高清视频| 精品成人国产在线观看男人呻吟| 日韩在线视频国产| 日韩中文字幕网| 久久久av亚洲男天堂| 久久韩国免费视频| 欧美夫妻性生活视频| 亚洲国产91色在线| 午夜精品久久久久久久99热浪潮| 欧美日韩在线免费观看| 在线观看日韩视频| 永久免费毛片在线播放不卡| 国产成人久久久精品一区| 国产成人精品a视频一区www| 亚洲网站在线播放| 亚洲最大福利网| 国产欧美一区二区三区久久| 狠狠久久亚洲欧美专区| 精品视频在线播放| 久久久久久久久中文字幕| 亚洲乱码国产乱码精品精天堂| 亚洲精品天天看| 精品久久久久久亚洲国产300| 在线国产精品播放| 成人免费在线视频网站| 97国产真实伦对白精彩视频8| 欧美最猛性xxxxx(亚洲精品)| 91最新在线免费观看| 欧美在线中文字幕| 亚洲一区二区三区成人在线视频精品| 日本精品久久电影| xxxx性欧美| 久久99久国产精品黄毛片入口| 国产视频精品自拍| 亚洲人成网站免费播放| 国产成人精品优优av| 日韩有码在线观看| 日韩电影免费在线观看中文字幕| 日韩免费观看网站| 91在线观看欧美日韩| 97在线视频免费| 欧美中文在线免费| 亚洲japanese制服美女| 午夜精品一区二区三区在线视频| 成人国产在线视频| 色婷婷av一区二区三区久久| 日韩精品一区二区视频| 亚洲日本中文字幕免费在线不卡| 久久伊人免费视频| 91精品国产91久久久久| 亚洲一级黄色片| 日韩网站在线观看| 日韩av网站导航| 久久国产精品久久精品| 日韩电影免费观看在线观看| 尤物精品国产第一福利三区| 国产欧美日韩视频| 久久视频国产精品免费视频在线| 8090成年在线看片午夜| 亚洲影视中文字幕| 国产精品美女免费| www.欧美三级电影.com| 最近2019中文字幕第三页视频| 91精品久久久久久久久| 欧美黄色免费网站| 91久久精品美女高潮| 欧美成人中文字幕在线| 国产69精品99久久久久久宅男|