日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美日韩欧美日韩在线观看视频 | 日韩欧美专区 | 色一情一乱一伦一区二区三区 | 日韩欧美偷拍 | 亚洲性一区 | 国产精品视频在 | 中国女人一级一次看片 | 久草精品国产 | 欧美亚洲国产一区 | 先锋影音中文字幕 | 日韩六九视频 | 国产传媒中文字幕 | 一级肉体全黄裸片中国 | 最好看的电影2019中文字幕 | 亚洲一区二区伦理 | 亚洲AV无码精品色毛片浪潮 | 激情另类视频 | 亚洲午夜毛片 | 天堂网av中文字幕 | 国产二级视频 | 日批视频在线播放 | 亚洲精选在线观看 | 精品无码人妻少妇久久久久久 | 伊人网综合网 | 国产三区在线视频 | 在线视频亚洲欧美 | 欧美日韩在线视频一区二区 | 成人国产在线视频 | 日本韩国在线播放 | 激情无遮挡 | 免费人妻精品一区二区三区 | 日本午夜影视 | 毛片传媒 | 精品乱子伦一区二区 | 我们2018在线观看免费版高清 | 久久.com| 波多野结衣中文字幕一区二区 | 国产激情四射 | 北条麻妃一区二区三区 | 亚洲视频在线一区 | 可乐操亚洲 | 久久福利小视频 | 久久福利小视频 | 亚洲国产精华液网站w | 日本草草影院 | 在线观看精品国产 | 亚洲青涩 | 亚洲国产精品综合 | 人人看人人干 | 情侣av | 91成人在线观看喷潮蘑菇 | 国产毛茸茸 | 欧美片一区二区三区 | 成年网站免费在线观看 | 风流僵尸艳片a级 | 操大爷影院 | 亚洲国产一二三 | 嫩草私人影院 | 蜜桃视频一区二区三区在线观看 | 成人av在线电影 | 三级a做爰全过程 | 日韩一道本 | 久久888| 三上悠亚在线一区二区 | 在线黄色av | 操你啦免费视频 | 亚洲tv在线 | 中文字幕亚洲精品在线观看 | 视频日韩| 一边摸上面一边摸下面 | 先锋资源国产 | 黄色福利片| 日韩美女黄色片 | 亚洲狠狠丁香婷婷综合久久久 | 91福利影院 | 极品国产一区 | 欧美一区视频 | 亚洲免费一 | 国产aⅴ无码片毛片一级一区2 | 97超碰人 | 国产真实乱人偷精品 | 在线观看黄色的网站 | 亚洲成人精品在线观看 | 三级做爰第一次 | 国产精品高潮呻吟久久aⅴ码 | 色哟哟在线播放 | 色吧五月天 | 高清中文字幕mv的电影 | 日本理伦片午夜理伦片 | 亚洲免费一二三区 | 鲁丝一区二区三区 | 少妇毛片视频 | 国产在线精品一区 | 男女啪啪免费网站 | 欧美18aaaⅹxx | 亚洲欧美一二三区 | 久久精品一区二区三区四区 | 欧美特黄aaaaaa | 色欲久久久天天天精品综合网 |