spring的aop是什么?它的关键词有哪些? spring aop涉及哪些知识点
\u5728Spring AOP\u4e2d\uff0c\u901a\u77e5\u662f\u4ec0\u4e48\uff1f\u6709\u54ea\u51e0\u79cd\u5728Spring\u4e2d\u5b9e\u73b0AOP\u6839\u636e\u7248\u672c\u4e0d\u540c\uff0c\u53ef\u4ee5\u6709\u5927\u81f4\u56db\u79cd\u914d\u7f6e\u65b9\u5f0f\u3002\u73b0\u7b80\u5355\u5217\u4e00\u4e0b\u3002\u5728\u4ecb\u7ecdSpring\u7684AOP\u914d\u7f6e\u65b9\u5f0f\u524d\uff0c\u5148\u8981\u6ce8\u610fSpring\u4e2dAdvisor\u7684\u6982\u5ff5\u3002\u5728Spring\u4e2dAdvisor\u662fAdvice\u548cPointcut\u7684\u7ed3\u5408\uff0c\u4f46\u5b83\u8fd8\u4e0d\u662fAOP\u6982\u5ff5\u4e0a\u7684Aspect\u3002\u56e0\u4e3a\u5728Spring\u4e2dAdvisor\u8fd8\u662fSpring\u7528\u6765\u751f\u6210Aspect\u5bf9\u8c61\u7684\u4e00\u4e2a\u539f\u578b\uff0c\u6839\u636e\u914d\u7f6e\u7684\u4e0d\u540c\uff0cSpring\u53ef\u4ee5\u53ea\u5bf9\u67d0\u4e2a\u7c7b\u751f\u6210Aspect\uff0c\u4e5f\u53ef\u4ee5\u5bf9\u6240\u6709\u7684\u7c7b\u751f\u6210Aspect\u3002
1. \u57fa\u4e8exml\u914d\u7f6e\u6587\u4ef6\u7684\u4ee3\u7406\u914d\u7f6e\u65b9\u5f0f
\u8fd9\u79cd\u65b9\u5f0f\u57282.0\u4ee5\u540e\u5f88\u5c11\u7528\u4e86\uff0c\u539f\u56e0\u662f\u914d\u7f6e\u9879\u8fc7\u591a\uff0c\u8fc7\u4e8e\u7e41\u7410\u3002\u4f46\u5bf9\u4e8e\u7406\u89e3Spring AOP\u8fd8\u662f\u5f88\u6709\u5e2e\u52a9\u7684
1.1 \u5b9a\u4e49\u901a\u77e5
1.2 \u5b9a\u4e49\u5207\u70b9
\u8981\u5b9a\u4e49\u4e00\u4e2a\u5207\u70b9\uff0c\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u65b9\u5f0f\u58f0\u660e\u7684\u5207\u70b9\u6216\u8005AspectJ\u65b9\u5f0f\u58f0\u660e\u7684\u5207\u70b9\u3002\u5bf9\u6b63\u5219\u8868\u8fbe\u5f0f\u5207\u70b9\uff0c\u4f7f\u7528Perl5RegexpMethodPointcut\u6216JdkRegexpMethodPointcut(Java
1.4\u4ee5\u4e0a\u7248\u672c\uff0c\u4e0d\u9700\u8981Jakarta ORO\u7684\u652f\u6301\u4e86)\uff1b\u5bf9AspectJ\u5207\u70b9\uff0c\u4f7f\u7528AspectJExpressPointcut
1.3 \u5b9a\u4e49\u901a\u77e5\u8005
DefaultPointcutAdvisor\u662fSpring\u63d0\u4f9b\u7684\u9ed8\u8ba4\u901a\u77e5\u8005\uff0c\u5b83\u9700\u8981\u63d0\u4f9b\u901a\u77e5\u548c\u5207\u70b9\u7684\u5f15\u7528\u3002
Spring\u4e5f\u63d0\u4f9b\u4e86RegexpMethodPointcutAdvisor\u548cAspectJExpressionPointcutAdvisor\u6765\u5bf9\u5e94\u4e24\u79cd\u58f0\u660e\u5207\u70b9\u7684\u65b9\u5f0f\uff0c\u4e0d\u7528\u518d\u5355\u72ec\u5b9a\u4e49\u5207\u70b9\u3002
1.4 \u5b9a\u4e49ProxyFactoryBean
interceptorNames\u548cproxyInterfaces\u90fd\u662f\u6570\u7ec4\u5c5e\u6027\uff0c\u6240\u4ee5\u53ef\u4ee5\u58f0\u660e\u8981\u4f7f\u7528\u7684\u4e00\u4e2alist\uff0c\u4e5f\u53ef\u4ee5\u8ba9Spring\u81ea\u52a8\u628a\u5355\u4e2a\u503c\u8f6c\u5316\u4e3a\u6570\u7ec4
\u4e0a\u9762\u660e\u786e\u5b9a\u4e49\u4e86\u8981\u5bf9\u90a3\u4e2atargetBean\u5e94\u7528\u4ee3\u7406\u751f\u6210\u5207\u9762\u5b9e\u4f8b\u3002\u5982\u679c\u4e0d\u60f3\u9650\u5236targetBean\uff0c\u53ef\u4ee5\u8ba9Spring\u4e3a\u6240\u6709\u5339\u914d\u5207\u70b9\u58f0\u660e\u7684bean\u751f\u6210\u5207\u9762\u5b9e\u4f8b\uff0c\u8fd9\u6837\u5c31\u4e0d\u7528\u4e00\u4e2a\u4e2a\u5b9a\u4e49ProxyFactoryBean\u4e86\uff0c\u53ea\u9700\u8981\u5b9a\u4e49
\u8fd9\u662f\u4e00\u4e2aBeanPostProcessor\uff0c\u6240\u4ee5Spring\u4f1a\u81ea\u52a8\u8bc6\u522b\u5e76\u5728bean\u7684\u58f0\u660e\u5468\u671f\u4f7f\u7528
2 \u5229\u75282.0\u4ee5\u540e\u4f7f\u7528aop\u6807\u7b7e
3 \u5229\u7528Annotation
3.1 \u5229\u7528@Aspect\u5c06\u4e00\u4e2aPOJO\u7c7b\u58f0\u660e\u4e3a\u4e00\u4e2a\u5207\u9762\u3002
3.2 \u5b9a\u4e49\u5207\u70b9
@Pointcut("execution(* *.perform(..))")
public void performance(){}
\u901a\u8fc7@Pointcut\u5b9a\u4e49\u7684\u5207\u70b9\u7684\u540d\u5b57\u5c31\u662f\u5b83\u6240\u6ce8\u89e3\u7684\u65b9\u6cd5\u7684\u540d\u5b57\uff0c\u56e0\u6b64\u4f8b\u5b50\u4e2d\u7684\u5207\u70b9\u540d\u5b57\u662f
performance()\u3002\u8fd9\u91cc\u58f0\u660e\u7684performance()\u65b9\u6cd5\u5b9e\u9645\u5723\u53ea\u662f\u4e00\u4e2a\u6807\u8bb0\uff0c\u4e3a@Pointcut\u63d0\u4f9b\u9644\u52a0\u7684\u70b9\uff0c\u5e76\u4e0d\u8981\u6c42\u6709\u5b9e\u9645\u610f\u4e49\u3002
3.3 \u5b9a\u4e49\u901a\u77e5
\u5bf9\u8981\u6267\u884c\u5207\u9762\u7684\u65b9\u6cd5\uff0c\u901a\u8fc7@Before("performance()"),@AfterReturning
("performance()")\u6765\u5b9a\u4e49\u901a\u77e5\u3002\u6ce8\u610f\u8fd9\u91cc\u63d0\u4f9b\u7684\u5207\u70b9\u540d\u79f0\uff0c\u662fperformance(),\u800c\u4e0d\u662fperformance
\u5982\u679c\u5bf9\u4e0a\u9762\u7684\u4e24\u70b9\u4e0d\u662f\u5f88\u7406\u89e3\uff0c\u4e5f\u53ef\u4ee5\u7701\u7565@Pointcut\uff0c\u800c\u5c06AspectJ\u8868\u8fbe\u5f0f\u76f4\u63a5\u5b9a\u4e49\u5728@Before\u7b49\u901a\u77e5\u4e2d\uff0c\u5c06\u4e0a\u9762\u7684\u4e24\u6b65\u5408\u4e3a\u4e00\u6b65\uff0c\u5982@Before("execution(* *.perform(..))")
3.4 \u901a\u77e5Spring\u521b\u5efa\u4ee3\u7406
\u8fd9\u5b9e\u9645\u4e0a\u76f8\u5f53\u4e8e\u58f0\u660e\u4e86\u4e00\u4e2aAnnotationAwareAspectJAutoProxyCreator\uff0c\u4ece\u800c\u6839\u636e@Pointcut\u58f0\u660e\u7684\u5207\u70b9\u6765\u81ea\u52a8\u4ee3\u7406\u5339\u914d\u7684bean\u5b9e\u4f8b
4 \u5728Spring\u4e2d\u7ed3\u5408\u8fdbAspectJ
\u5bf9\u4e8e\u8d85\u51faSpring AOP\u652f\u6301\u8303\u56f4\u7684\uff0c\u53ef\u4ee5\u91c7\u7528\u8fd9\u79cd\u65b9\u5f0f\u3002\u53ea\u9700\u8981\u5728Spring\u4e2d\u914d\u7f6eAspectJ\u7684Class\u5b9e\u4f8b\u65f6\u8ba9Spring\u80fd\u591f\u83b7\u5f97AspectJ\u7c7b\u7684\u5b9e\u4f8b\u5c31\u53ef\u4ee5\u4e86\uff0c\u6bd4\u5982
绛旓細鍒涘缓琚皟鐢ㄨ呯殑宸ヤ綔鐢眘pring鏉ュ畬鎴愶紝鐒跺悗娉ㄥ叆璋冪敤鑰 鍥犳涔熺О涓轰緷璧栨敞鍏ャ俿pring浠ュ姩鎬佺伒娲荤殑鏂瑰紡鏉ョ鐞嗗璞 锛 娉ㄥ叆鐨勪袱绉嶆柟寮忥紝璁剧疆娉ㄥ叆鍜屾瀯閫犳敞鍏ャ傝缃敞鍏ョ殑浼樼偣锛氱洿瑙傦紝鑷劧 鏋勯犳敞鍏ョ殑浼樼偣锛氬彲浠ュ湪鏋勯犲櫒涓喅瀹氫緷璧栧叧绯荤殑椤哄簭銆浠涔堟槸AOP锛闈㈠悜鍒囬潰缂栫▼锛圓OP锛夊畬鍠spring鐨渚濊禆娉ㄥ叆锛圖I锛夛紝闈㈠悜鍒囬潰缂栫▼...
绛旓細鐩爣瀵硅薄锛圱arget Object锛 琚竴涓垨鑰呭涓垏闈紙aspect锛夋墍閫氱煡锛坅dvise锛夌殑瀵硅薄 涔熸湁浜烘妸瀹冨彨鍋 琚氱煡锛坅dvised锛 瀵硅薄 鏃㈢劧Spring AOP鏄閫氳繃杩愯鏃朵唬鐞嗗疄鐜扮殑 杩欎釜瀵硅薄姘歌繙鏄竴涓 琚唬鐞嗭紙proxied锛 瀵硅薄 AOP浠g悊锛圓OP Proxy锛 AOP妗嗘灦鍒涘缓鐨勫璞 鐢ㄦ潵瀹炵幇鍒囬潰濂戠害锛坅spect contract锛夛紙鍖呮嫭閫氱煡鏂规硶鎵ц...
绛旓細鎴戠粰浣犳潵涓潈濞佺殑锛屼綘绛斿埌杩欎笅闈㈠氨鍩烘湰涓嶉棶浜嗐侷OC锛堝弽杞帶鍒讹級锛氬鎴愬憳鍙橀噺鐨勮祴鍊肩殑鎺у埗鏉冧粠浠g爜涓弽杞埌閰嶇疆鏂囦欢涓AOP锛欰spect锛堝垏闈級Oriented锛堥潰鍚戯級Programming锛堢紪绋嬶級锛岄潰鍚戝垏闈㈢紪绋嬨傚樊涓嶅灏卞浜嗭紝鍐嶇湅灏辨槸Spring鐨浜嬪姟澶勭悊锛屽熀鏈氨杩欎簺銆
绛旓細AspectJ鐨勫簳灞傛妧鏈槸闈欐佷唬鐞嗭紝鍗崇敤涓绉岮spectJ鏀寔鐨勭壒瀹氳瑷缂栧啓鍒囬潰锛岄氳繃涓涓懡浠ゆ潵缂栬瘧锛岀敓鎴愪竴涓柊鐨勪唬鐞嗙被锛岃浠g悊绫诲寮轰簡涓氬姟绫伙紝杩欐槸鍦ㄧ紪璇戞椂澧炲己锛岀浉瀵逛簬涓嬮潰璇寸殑杩愯鏃跺寮猴紝缂栬瘧鏃跺寮虹殑鎬ц兘鏇村ソ銆Spring AOP閲囩敤鐨勬槸鍔ㄦ佷唬鐞嗭紝鍦ㄨ繍琛屾湡闂村涓氬姟鏂规硶杩涜澧炲己锛屾墍浠ヤ笉浼氱敓鎴愭柊绫伙紝瀵逛簬鍔ㄦ佷唬鐞...
绛旓細鑰屽鏋滃疄鐜颁竴涓唬鐞嗙被锛屽湪绫讳腑璋冪敤ObjectImpl锛岃繖鏍峰閮ㄨ闂唬鐞嗙被鏃朵細闂存帴璋冪敤ObjectImpl锛屽苟涓旀杩囩▼鍙互鎵╁睍鑰屼笉鐢ㄥ婧愪唬鐮丱bjectImpl杩涜淇敼銆spring 涓殑AOP灏辨槸鍩轰簬杩欑鍘熺悊銆侫OP涓細鍙戠敓澶氫釜閫昏緫澶嶅悎澶勭悊鐨勬儏鍐碉紝浣跨敤浠g悊绫昏兘鍑嗙‘鎵ц鐩爣绫讳腑瀹氫箟鐨勯昏緫鍗曞厓骞朵笖鎵╁睍鍏朵粬鐨勯昏緫鍗曞厓銆
绛旓細ioc灏辨槸鎺у埗缈昏浆鎴栨槸渚濊禆娉ㄥ叆銆傞氫織鐨勮灏辨槸濡傛灉鍦浠涔鍦版柟闇瑕佷竴涓璞★紝浣犺嚜宸变笉鐢ㄥ幓閫氳繃new 鐢熸垚浣犻渶瑕佺殑瀵硅薄锛岃屾槸閫氳繃spring鐨bean宸ュ巶涓轰綘闀跨敓杩欐牱涓涓璞°aop灏辨槸闈㈠悜鍒囬潰鐨勭紪绋嬨傛瘮濡傝浣犳瘡鍋氫竴娆″鏁版嵁搴撴搷浣滐紝閮借鐢熸垚涓鍙ユ棩蹇椼傚鏋滐紝浣犲鏁版嵁搴撶殑鎿嶄綔鏈夊緢澶氱被锛岄偅浣犳瘡涓绫讳腑閮借鍐欏叧浜庢棩蹇...
绛旓細Spring 妗嗘灦鏄竴涓垎灞傛灦鏋勶紝鐢 7 涓畾涔夎壇濂界殑妯″潡缁勬垚銆係pring 妯″潡鏋勫缓鍦ㄦ牳蹇冨鍣ㄤ箣涓婏紝鏍稿績瀹瑰櫒瀹氫箟浜嗗垱寤恒侀厤缃拰绠$悊 bean 鐨勬柟寮忋傜粍鎴 Spring 妗嗘灦鐨勬瘡涓ā鍧楋紙鎴栫粍浠讹級閮藉彲浠ュ崟鐙瓨鍦紝鎴栬呬笌鍏朵粬涓涓垨澶氫釜妯″潡鑱斿悎瀹炵幇銆Spring 鐨搴旂敤绋嬪簭涓殑瀵硅薄鎻愪緵浜嗕簨鍔$鐞嗘湇鍔°傞氳繃浣跨敤 Spring AOP锛屼笉鐢...
绛旓細IOC鐨勫熀鏈蹇垫槸锛氫笉鍒涘缓瀵硅薄锛屼絾鏄弿杩板垱寤哄畠浠殑鏂瑰紡銆傚湪浠g爜涓笉鐩存帴涓庡璞″拰鏈嶅姟杩炴帴锛屼絾鍦ㄩ厤缃枃浠朵腑鎻忚堪鍝竴涓粍浠堕渶瑕佸摢涓椤规湇鍔°係pring瀹瑰櫒璐熻矗灏嗚繖浜涜仈绯诲湪涓璧枫備篃灏辨槸璇达紝Spring鐨IOC璐熻矗绠$悊鍚勭瀵硅薄鐨勫垱寤恒佹竻闄や互鍙婂畠浠箣闂寸殑鑱旂郴銆AOP鏄鎸囬潰鍚戝垏闈㈢紪绋嬶紙涔熷彨闈㈠悜鏂归潰锛夛紝鍙互閫氳繃棰勭紪璇戞柟寮忓拰...
绛旓細涓鑸厤缃椂鏄氳繃閰嶇疆鍖归厤鏌愪釜鏍煎紡鐨勬柟娉曞悕,褰撹繍琛屽埌杩欑鏂规硶鐨勬椂鍊檚pring灏变細鎷︽埅涓嬪畠鏉,骞剁粰瀹冨姞涓婁簨鐗╃殑澶勭悊浜 閫氫織鐐硅spring鐨凙OP鐩稿綋涓庣數鑴戜腑涓绘澘鐨勪綔鐢ㄣ備富鏉匡細灏辨槸鎶婂悇绉嶅厓鍣ㄤ欢杩炴帴鍒板叾涓婏紝缁熶竴鐢卞叾绠$悊锛岄伩鍏嶄簡鍏冨櫒浠朵笌涓庡櫒浠朵箣闂磋繛鎺ョ殑娣蜂贡銆備笉鐭ヨ繖涔堣浣犳湁娌℃湁鏄庣櫧涓浜 ...
绛旓細ioc鏄帶鍒跺弽杞紝鏄spring鐨鏍稿績鎬濇兂銆傞氳繃闈㈠悜鎺ュ彛缂栫▼鏉ュ疄鐜板涓氬姟缁勪欢鐨勫姩鎬佷緷璧栥aop鏄闈㈠悜鍒囬潰缂栫▼锛屽畠骞朵笉鏄彧鍦╯pring鎴栬卝ava涓墠鏈夌殑锛屽畠鍜岄潰鍚戝璞$紪绋嬶紙oop锛夋槸鐩稿鑰岃█鐨勫彟涓绉嶇紪绋嬫濇兂銆俿pring鍦ㄥ疄鐜癮op缂栫▼鏃跺埄鐢ㄧ殑鏄痡ava鐨勪唬鐞嗘満鍒躲備釜浜鸿寰梛ava浠g悊鏈哄埗鐪熺殑鏄緢绁炲銆傛牳蹇冨唴瀹瑰苟涓嶅锛屽缓璁綘...