日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring4基础 学习笔记(3) ---- AOP(1) ---- 基于Xml

發布時間:2025/3/20 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring4基础 学习笔记(3) ---- AOP(1) ---- 基于Xml 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
AOP: 術語: 連接點:可以被切面織入的方法(這里的 可以 ?指的是在容器中注冊為連接點) 切入點:具體要織入的方法 目標對象:要被織入的方法所在的對象 通知(Advice):切面的一種實現,可以完成簡單的織入功能。定義了織入時間。即增強的業務什么時候實現,主業務之前或者之后 ? 顧問(Advisor):將通知進一步包裝。可以選擇增強的方法 用代理實現AOP:將交叉業務和系統級服務放在代理中。 AOP環境搭建: 1)導入jar: 2)原來的applicationContext.xml規范 通知(Advice):AOP 1)MethodBeforeAdvice ?: 前置通知 定義實現該接口的類(切面) 注冊該類 <!-- 切面 --> <bean id="before" class="MyMethodBeforeAdvice"/> 注冊代理工廠bean,用來提供代理對象, <bean id="Factory" class="org.springframework.aop.framework.ProxyFactoryBean"> 設置工廠的參數: <property name="targetName" value="someService"/> 或者 <property name="target" ref = "service.ISomeServiceImpl"/> 配置切面: <!-- 切面 --> <property name="interceptorNames" value="before" ? ? ? ? ? ? ? ? ? ? ? 2)AfterRunningAdvice:后置通知,多了業務方法返回值,其余同上 3)MethodInterceptor:環繞通知 public class myMethodInterceptor implements MethodInterceptor { ??????@Override ??????public Object invoke(MethodInvocation invocation) throws Throwable { ????????????// TODO Auto-generated method stub ????????????System.out.println("之前"); //注意:這個方法返回值是業務里doFirst方法返回值 ????????????Object result = invocation.proceed();????? ????????????System.out.println("之后"); ????????????return result; ??????} } 輸出 : 之前 執行doFirst方法 之后 參數invocation.proceed方法執行業務方法 4)ThrowsAdvice:異常通知 //異常通知 public??class??myThrowsAdvice implements ThrowsAdvice { ??????public void afterThrowing(Exception ex) { ????????????System.out.println("執行異常通知方法" +ex.getMessage() ); ??????} } 給對象織入多個切面: ????????????<property name="interceptorNames"> ??????????????????<array> ????????????????????????<value>before</value> ??????????????????</array> ????????????</property> ???????????? ????????????<!-- <property name="interceptorNames" value="用逗號分割"> --> 使用<bean id="Factory" class="org.springframework.aop.framework.ProxyFactoryBean"> 這種方式:有接口會生成JDKDynamicProxy對象,沒有接口會使用CGLIB動態代理 在有接口情況下使用CGLIB代理: 增加一個property-><property name="proxyTargetClass" value="true"> ? 或者:<property name="optimize" value="true"> ? ? ?? 顧問:選擇切入點(Advice所有方法都切入,只是簡單實現) PointcutAdvisor接口常用實現類: NameMatchMethodPonitcutAdvisor:名稱匹配方法切入點顧問 ??????<!-- 切面 --> ??????<bean id="before" class="MyMethodBeforeAdvice"/> ?????? ??????<!-- 注冊Advisor --> ??????<bean id="myAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> ????????????<property name="advice" ref="before"/> ????????????<property name="mappedName" value="doFirst"/> ??????</bean> 使用mappedNames匹配多個方法 <property name="mappedName" value="*ir*"/> ?--->?使用通配符匹配帶有ir的 使用顧問(而不是切面) <bean id="serviceProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> ????????????<!-- <property name="targetName" value="someService"/> --> ????????????<property name="target" ref ="someService"/> ????????????<!-- 包裝切面 --> ????????????<property name="interceptorNames" value="myAdvisor" />? ? </bean> RegexMethodPointcutAdvisor : 正則表達式匹配方法切入點顧問 正則表達式:
運算符名稱意義
.點號表示任意單個字符
+加號表示前一個字符出現一次或者多次
*星號表示前一個字符出現0次或者多次
|A | B ? 模式A或者模式B或者
??????<bean id="myAdvisor2" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> ????????????<property name="advice" ref="before"/> ????????????<property name="pattern" value=".*i.*"/> ? ? ? ? ?//任意字符出現一次或者多次,使用patterns匹配多個模式 ? ?? </bean> 注意:pattern匹配的是全限定性方法名,doFirst無法匹配dofirst方法,.*doFirst可以匹配 問題 : 如果被代理對象有多個,那么代理bean需要多個。 自動代理生成器(均繼承自bean后處理器BeanPostProcessor,容器中所有Bean在初始化時均會自動執行Bean后處理器中的方法,故其無需id屬性): 默認advisor自動代理生成器 bean名稱自動代理生成器 1)默認advisor自動代理生成器: ??????<!-- 注冊自動代理生成器 --> ??????<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" /> 缺點:默認使用顧問(容器里配置的顧問),所有bean的顧問指定方法都會織入 2)bean名稱自動代理生成器:可以實現對指定bean的切入和指定方法的切入 ??????<!-- bean名稱自動代理生成器 --> ??????<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" > ????????????<property name="beanNames" value="someService"/> ????????????<!-- 還能指定切面 --> ????????????<property name="interceptorNames" value="myAdvisor"/> ??????</bean>

轉載于:https://www.cnblogs.com/coderlynn/p/8654321.html

總結

以上是生活随笔為你收集整理的Spring4基础 学习笔记(3) ---- AOP(1) ---- 基于Xml的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。