现在的位置: 首页 > 编程语言 > 正文

濡備綍浣跨敤SpringAOP鐨勯€氱煡绫诲瀷鍙婂垱寤洪€氱煡

2020年02月13日 编程语言 ⁄ 共 4263字 ⁄ 字号 评论关闭

鍐欏湪鏈€鍓嶇

1.SpringAOP涓叡鏈夊叚绉嶉€氱煡绫诲瀷,鍙鎴戜滑鑷畾涔変竴涓被瀹炵幇瀵瑰簲鐨勬帴鍙o紝瀹冧滑鍏ㄩ兘鏄痮rg.springframework.aop鍖呬腑鐨勩€?br />

2.AOP鐨勮繛鎺ョ偣鍙互鏄柟娉曡皟鐢ㄣ€佹柟娉曡皟鐢ㄦ湰韬€佺被鍒濆鍖栥€佸璞″疄渚嬪寲鏃讹紝浣嗘槸SpringAOP涓叏鏄柟娉曡皟鐢紝鏇寸畝鍗曪紝涔熸渶瀹炵敤

閫氱煡鍚嶇О 鎺ュ彛

鍓嶇疆閫氱煡 org.springframework.aop.MethodBeforeAdvice 鍚庣疆杩斿洖閫氱煡 org.springframework.aop.AfterReturningAdvice 鍚庣疆閫氱煡 org.springframework.aop.AfterAdvice 鐜粫閫氱煡 org.springframework.aop.MethodInterceptor 寮傚父閫氱煡 org.springframework.aop.ThrowsAdvice 寮曞叆閫氱煡 org.springframework.aop.IntroductionInterceptor

鍐欎竴涓叕鍏辩被锛岀敤浜庣洰鏍囧璞?/p>

public class Person { private String name; public boolean saySomething(String something){ System.out.println("Pereson绫讳腑璇翠簡涓€鍙ワ細"+something);return true;//榛樿杩斿洖true } public String getName() { return name; } public void setName(String name) { this.name = name; }}

涓€銆佸垱寤哄墠缃€氱煡(涔熷氨鏄洰鏍囨柟娉曡皟鐢ㄥ墠鎵ц)

鍓嶇疆閫氱煡鍙互淇敼浼犻€掔粰鏂规硶鐨勫弬鏁帮紝骞朵笖鍙互閫氳繃鎶涘嚭寮傚父鏉ラ樆姝㈡柟娉曠殑鎵ц锛屽彲浠ョ敤鍓嶇疆閫氱煡瀹炵幇鐢ㄦ埛鐧诲綍鐨勯獙璇侊紝SpringSecurity灏辨槸杩欎箞鍋氱殑

1.渚嬪瓙锛氬湪涓€涓柟娉曟墽琛屽墠灏嗗寘鍚柟娉曞悕绉扮殑娑堟伅鍐欏叆鍒版帶鍒跺彴涓?骞朵笖灏嗕紶鍏ョ殑鍙傛暟淇敼涓嬨€傦紙鏂囩珷涓啓鐨勫唴瀹规瘮杈冨皬锛屽ぇ澶氭暟鍦ㄤ唬鐮佷腑鏈夋敞閲婏紝澶у鍙互涓嬭浇浠g爜鏌ョ湅锛?/p>

/** * 鍓嶇疆閫氱煡绫? */public class BeforeAdvice implements MethodBeforeAdvice { @Override public void before(Method method, Object[] objects, @Nullable Object o) throws Throwable { //绗竴涓弬鏁版槸鐩爣鏂规硶瀵硅薄锛岀浜屼釜鏄弬鏁?绗笁涓槸鍋氫负璋冪敤鐩爣鐨刼bject(杩欐槸personr瀹炰緥) //鎵撳嵃鏂规硶鍚? System.out.println("瑕佹墽琛岀殑鏂规硶鏄細"+method.getName()); //淇敼鍙傛暟涓簂yn4ever objects[0]="lyn4ever";//鎴戜滑淇敼鎴愪负浜唋yn4ever,鎵€浠ユ墦鍗板嚭鏉ョ殑灏辨槸lyn4ever锛岃€屼笉鏄痾hangsan } public static void main(String[] args) { Person person = new Person(); ProxyFactory pf =new ProxyFactory(); pf.addAdvice(new BeforeAdvice()); pf.setTarget(person); Person proxy = (Person) pf.getProxy(); //鎴戣繖閲屼紶鐨勫弬鏁版槸zhangsan,鐞嗚涓婂畠搴旇鎵撳嵃鍑烘潵zhangsan proxy.saySomething("zhangsan"); }}

娌℃瘺鐥咃紝鏈潵鎴戣緭鍏ョ殑鏄痾hangsan锛屽湪aop涓皢鍙傛暟鏀逛负浜唋yn4ever,杩欐牱灏卞畬缇庣殑鏇挎崲浜嗐€?/p>

浜屻€佸悗缃繑鍥為€氱煡

鏄湪杩炴帴鐐癸紙鏂规硶璋冪敤锛夎繑鍥炲悗鎵ц锛岃繖鏄剧劧涓嶈兘鍍忎笂杈归偅鏍蜂慨鏀瑰弬鏁帮紝涔熶笉鑳戒慨鏀硅繑鍥炲€笺€備絾鏄彲浠ユ姏鍑哄彲浠ュ彂閫佸埌鍫嗘爤鐨勫紓甯革紝鍚屾牱涔熷彲浠ヨ皟鐢ㄥ叾浠栨柟娉曘€?br />

/** * 鍚庣疆杩斿洖閫氱煡 */public class AfterReturnAdvice implements AfterReturningAdvice { @Override public void afterReturning(@Nullable Object o, Method method, Object[] objects, @Nullable Object o1) throws Throwable { /* 鍙傛暟鍜屽墠缃€氱煡鏄竴鏍风殑 杩欎釜鏄湪杩斿洖涔嬪悗璋冪敤锛屽洜姝わ紝person涓殑saySomething浼氬厛鎵撳嵃锛屾垜浠湪杩欓噷淇敼鐨勫弬鏁颁笉璧蜂綔浠讳綍浣滅敤 */ System.out.println("璋冪敤鐨勬柟娉曟槸:"+method.getName()+"杩欏彞鏄湪saySomething涔嬪悗");//杩欏彞鏄湪saySomething涔嬪悗 objects[0]="lyn4ever";//杩欏彞鍙互淇弬鏁帮紝浣嗘槸涔嬪墠鐨勬柟娉曞凡缁忔墽琛岃繃浜嗭紝鎵€浠ヤ笉璧蜂换浣曚綔鐢? System.out.println("鎴戜滑淇敼浜嗗弬鏁颁负:"+objects[0]+"浣嗘槸娌℃湁浠讳綍鐢?);//杩欐椂鍊欒繖涓弬鏁板苟涓嶄細浼犲埌person.saysomething(),鍥犱负宸茬粡璋冪敤杩囦簡 } public static void main(String[] args) { Person person = new Person(); ProxyFactory pf = new ProxyFactory(); pf.addAdvice(new AfterReturnAdvice());//娉ㄦ剰淇敼杩欎釜涓哄綋鍓嶇被涓殑閫氱煡绫? pf.setTarget(person); Person proxy = (Person) pf.getProxy(); proxy.saySomething("zhangsan"); }}

涓夈€佺幆缁曢€氱煡

杩欎汉鏈€濂界悊瑙d簡锛屽氨鏄湪鏂规硶璋冪敤鍓嶅悗閮藉彲浠ユ墽琛屼唬鐮併€傜湅璧锋潵鍍忔槸鍓嶇疆鍚庡悗缃殑闆嗗悎锛屼絾鏄畠鍙互淇敼鏂规硶鐨勮繑鍥炲€硷紝鍥犱负瀹冨疄鐜扮殑invoke鏂规硶鐨勮繑鍥炲€兼槸Object,鎵€浠ユ垜浠氨鍙互淇敼锛岃€屽墠缃€氱煡鐨勮繑鍥炴槸void锛屾墍浠ユ病娉曚慨鏀圭殑銆傜敋鑷充互鑷充簬鎴戜滑鍙互涓嶈皟鐢ㄧ洰鏍囧璞′腑鐨勮繛鎺ョ偣鏂规硶锛屾垜浠畬鍏ㄤ慨鏀硅繖涓柟娉曠殑鍏ㄩ儴浠g爜銆?/p>

public class MyMethodInterceptor implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { return null; }}

铏界劧杩欎釜invoke()鏂规硶涓苟娌℃湁鎻愪緵鍍忎箣鍓嶇殑閭d簺鍙傛暟锛屼絾鏄繖涓€涓猧nvocation瀹炰緥鍙互寰楀埌

浠g爜绀轰緥

/** * 鐜粫閫氱煡 */public class MyMethodInterceptor implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { //鍦ㄨ繖涓猧nvoation涓湁涓€鍒囨垜浠兂瑕佺殑鏂规硶鐩稿叧 System.out.println("绫诲悕鏄?"+invocation.getThis().getClass().getName()); System.out.println("鐩爣鏂规硶鏄?"+invocation.getMethod().getName()); Object[] arguments = invocation.getArguments();//杩欎釜灏辨槸鍙傛暟 System.out.println("绗竴涓弬鏁?鏄?"+arguments[0]); //鎴戜滑淇敼绗竴涓弬鏁颁负lyn4ever arguments[0]="lyn4ever"; invocation.proceed();//鎵ц鐩爣鏂规硶 System.out.println("杩欎釜鏄湪涔嬪悗鎵ц鐨?); return false;//淇敼杩斿洖鍊? } public static void main(String[] args) { Person person = new Person(); ProxyFactory pf = new ProxyFactory(); pf.addAdvice(new MyMethodInterceptor());//娉ㄦ剰淇敼杩欎釜涓哄綋鍓嶇被涓殑閫氱煡绫? pf.setTarget(person); Person proxy = (Person) pf.getProxy(); boolean flag = proxy.saySomething("zhangsan"); System.out.println(flag);//鏂规硶鏈潵鏄杩斿洖true鐨? }}

鍙互鐪嬪埌锛屾垜浠慨鏀逛簡鐩爣鏂规硶杩斿洖鐨勫€笺€?/p>

鏈枃demo宸叉彁浜よ嚦github

鎬荤粨

浠ヤ笂灏辨槸杩欑瘒鏂囩珷鐨勫叏閮ㄥ唴瀹逛簡锛屽笇鏈涙湰鏂囩殑鍐呭瀵瑰ぇ瀹剁殑瀛︿範鎴栬€呭伐浣滃叿鏈変竴瀹氱殑鍙傝€冨涔犱环鍊硷紝璋㈣阿澶у瀵规垜浠殑鏀寔銆?/p>

鏈枃鏍囬: 濡備綍浣跨敤Spring AOP鐨勯€氱煡绫诲瀷鍙婂垱寤洪€氱煡

鏈枃鍦板潃: http://www.xuebuyuan.com/ruanjian/java/293582.html

以上就上有关濡備綍浣跨敤SpringAOP鐨勯€氱煡绫诲瀷鍙婂垱寤洪€氱煡的相关介绍,要了解更多spring,aop鍘熺悊,spring,aop閫氱煡绫诲瀷内容请登录学步园。

抱歉!评论已关闭.