锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Spring AOP 鐢ㄦ埛鍙兘浼氱粡甯鎬嬌鐢? 闄や簡榪斿洖綾誨瀷妯″紡錛堜笂闈唬鐮佺墖鏂腑鐨剅et-type-pattern錛夛紝鍚嶅瓧妯″紡鍜屽弬鏁版ā寮忎互澶栵紝鎵鏈夌殑閮ㄥ垎閮芥槸鍙夌殑銆?榪斿洖綾誨瀷妯″紡鍐沖畾浜嗘柟娉曠殑榪斿洖綾誨瀷蹇呴』渚濇鍖歸厤涓涓繛鎺ョ偣銆?浣犱細浣跨敤鐨勬渶棰戠箒鐨勮繑鍥炵被鍨嬫ā寮忔槸 涓嬮潰緇欏嚭涓浜涘父瑙佸垏鍏ョ偣琛ㄨ揪寮忕殑渚嬪瓙銆?/p>
浠繪剰鍏叡鏂規(guī)硶鐨勬墽琛岋細 浠諱綍涓涓互“set”寮濮嬬殑鏂規(guī)硶鐨勬墽琛岋細 瀹氫箟鍦╯ervice鍖呴噷鐨勪換鎰忔柟娉曠殑鎵ц錛?/p> 瀹氫箟鍦╯ervice鍖呮垨鑰呭瓙鍖呴噷鐨勪換鎰忔柟娉曠殑鎵ц錛?/p> within(com.xyz.service.*)鍦╯ervice鍖呮垨鑰呭瓙鍖呴噷鐨勪換鎰忚繛鎺ョ偣錛堝湪Spring AOP涓彧鏄柟娉曟墽琛岋級 錛?nbsp; within(com.xyz.service..*)瀹炵幇浜?AccountService 鎺ュ彛鐨勪唬鐞嗗璞$殑浠繪剰榪炴帴鐐癸紙鍦⊿pring AOP涓彧鏄柟娉曟墽琛岋級 錛?nbsp; this(com.xyz.service.AccountService)'this'鍦╞inding form涓敤鐨勬洿澶氾細- 璇峰父瑙佷互涓嬭璁洪氱煡鐨勭珷鑺備腑鍏充簬濡備綍浣垮緱浠g悊瀵硅薄鍙互鍦ㄩ氱煡浣撳唴璁塊棶鍒扮殑閮ㄥ垎銆?nbsp; @target(org.springframework.transaction.annotation.Transactional)'@target' 涔熷彲浠ュ湪binding form涓嬌鐢細璇峰父瑙佷互涓嬭璁洪氱煡鐨勭珷鑺備腑鍏充簬濡備綍浣垮緱annotation瀵硅薄鍙互鍦ㄩ氱煡浣撳唴璁塊棶鍒扮殑閮ㄥ垎銆?nbsp; @within(org.springframework.transaction.annotation.Transactional)'@within'涔熷彲浠ュ湪binding form涓嬌鐢細- 璇峰父瑙佷互涓嬭璁洪氱煡鐨勭珷鑺備腑鍏充簬濡備綍浣垮緱annotation瀵硅薄鍙互鍦ㄩ氱煡浣撳唴璁塊棶鍒扮殑閮ㄥ垎銆?nbsp; @annotation(org.springframework.transaction.annotation.Transactional)'@annotation' 涔熷彲浠ュ湪binding form涓嬌鐢細- 璇峰父瑙佷互涓嬭璁洪氱煡鐨勭珷鑺備腑鍏充簬濡備綍浣垮緱annotation瀵硅薄鍙互鍦ㄩ氱煡浣撳唴璁塊棶鍒扮殑閮ㄥ垎銆?nbsp; org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)VCaused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)
1 : ParameterMethodNameResolver,榪欎釜鍙互鏍規(guī)嵁璇鋒眰鐨勫弬鏁版潵紜畾涓涓渶瑕佽皟鐢ㄧ殑鏂規(guī)硶銆?br />渚嬪錛?a >http://www.sf.net/index.view?testParam=testIt錛岃繖涓姹備細璋冪敤鍚嶇О涓簍estIt鐨勫鐞嗘柟娉曘?br />
2 : InternalPathMethodNameResolver錛岃繖涓彲浠ユ牴鎹姹傜殑璺緞鍚嶇О鏉ヨ皟鐢ㄧ浉搴旂殑鏂規(guī)硶銆?br />渚嬪錛?a >http://www.sf.net/testing.view,榪欎釜璇鋒眰浼氳皟鐢╰esting鏂規(guī)硶銆?br />
3 : PropertiesMethodNameResolver錛岃繖涓彲浠ユ牴鎹竴涓猆RLs 鏄犲皠鍒楄〃鏉ヨ皟鐢ㄧ浉搴旂殑鏂規(guī)硶銆?br />渚嬪錛屽鏋滃畾涔変簡/index/welcome.html=doIt錛岄偅涔堝綋璇鋒眰涓?index/welcome.html鏃訛紝浼氳皟鐢╠oIt鏂規(guī)硶銆傚湪瀹氫箟URLs鏃跺彲浠ヤ嬌鐢ㄩ氶厤絎︺?**/welcom?.html
ParameterMethodNameResolver
InternalPathMethodNameResolver
PropertiesMethodNameResolver
閰嶇疆web.xml
Java浠g爜
1. <servlet>
2. <servlet-name>spring</servlet-name>
3. <servlet-class>
4. org.springframework.web.servlet.DispatcherServlet
5. </servlet-class>
6. <load-on-startup>2</load-on-startup>
7. </servlet>
8. <servlet-mapping>
9. <servlet-name>spring</servlet-name>
10. <url-pattern>/spring/*</url-pattern>
11. </servlet-mapping>
瀹氫箟涓涓狢ontroller緇ф壙涓嶮ultiActionController
Java浠g爜
1. package cn.iwoo.server.controller;
2.
3. import javax.servlet.http.HttpServletRequest;
4. import javax.servlet.http.HttpServletResponse;
5.
6. import org.springframework.web.servlet.ModelAndView;
7. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
8.
9. public class BController extends MultiActionController {
10. public ModelAndView doSearch(HttpServletRequest request, HttpServletResponse response) throws Exception {
11. System.out.println(this.getClass() + "." + "doSearch()");
12. return new ModelAndView("");
13. }
14. }
鏂規(guī)硶鐨勫畾涔夊繀欏葷鍚堜笅闈㈢殑鏍煎紡
Java浠g爜
1. public (ModelAndView | Map | String | void) actionName(HttpServletRequest request, HttpServletResponse response);
瀹氫箟ViewResolver
Java浠g爜
1. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
鐑偣鎺ㄨ崘
涓浗姘戦棿欖旀湳銆佸師鏉ュ姝?br />鐧懼紶涓夌淮绔嬩綋鍥?br />紺句氦紺間華璁插駭
75
涓轟粈涔堣浣跨敤涓夊紱借倝涓嶈兘鍚冪殑涓浗鍚勭渷浜哄彛鎺掑彂浜鴻閱掞細涓涓竴涓漢鐨勪笘鐣?br />鏂版蹇佃嫳璇涔犺嫳璇悕浜哄悕璦
緇忓吀鎰熸?zhèn)熺殑鍗佷釜鐜板疄鐢煁z諱腑鐨勪綘[鍘熷垱
澹搲錛?br />钀戒紞娌★紵鐩樼偣
瀹侀潤錛堥煶鐢伙級
緇欐兂騫蹭簨鐨勪漢浠ュ崼鏄熺數瑙嗗垵瀛﹁呯浉鍏蟲枃绔?
Spring鏋舵瀯璁捐-澧炲己MultiActionController
MultiActionController緇戝畾command
Spring鐨凪ultiActionController浣跨敤
鎺ㄨ崘鍦堝瓙: GT-Grid
鏇村鐩稿叧鎺ㄨ崘
Google
Java
Spring Wire
MVC
Compression Spring
鍏抽棴
MultiActionController涓?縐峂ethodNameResolver鐨勯厤緗?a >http://www.360doc.com/content/10/0329/17/968587_20...
絎?欏?鍏?欏?011-07-29 15:59
<property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</2. value></property>
3. <property name="prefix"><value>/WEB-INF/jsp/</value></property>
4. <property name="suffix"><value>.jsp</value></property>
5. </bean>
瀹氫箟UrlHandlerMapping
Java浠g爜
1. <bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
2. lt;property name="urlMap">
3. <map>
4. <entry key="/b/*"><ref bean="bController"></ref></entry>
5. </map>
6. lt;/property>
7. </bean>
瀹氫箟MethodNameResolver
涓鍏卞畾涔変簡3涓笉鍚岀被鍨嬬殑MethodNameResolver.
Java浠g爜
1. <!-- MethodNameResolver Definition -->
<bean id="bMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
2.
3. <property name="paramName" value="method"></property>
4. <property name="logicalMappings">
5. <props>
6. <prop key="doSearch">doSearch</prop>
7. </props>
8. </property>
9. </bean>
10.
<bean id="cMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver">
11.
12. </bean>
13.
<bean id="dMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
14.
15. <property name="mappings">
16. <value>
17. /b/page.html=doSearch
18. </value>
19. </property>
20. </bean>
瀹氫箟Controller
Java浠g爜
1. <!-- Controller Definition -->
2. <bean id="bController" class="cn.iwoo.server.controller.BController">
3. <!-- <property name="methodNameResolver"><ref local="bMethodNameResolver"/></property> -->
4. <!-- <property name="methodNameResolver"><ref local="cMethodNameResolver"/></property> -->
5. <property name="methodNameResolver"><ref local="dMethodNameResolver"/></property>
6. </bean>
嫻嬭瘯
涓嬮潰鏄搴斾簬涓嶅悓MethodNameResolver鐨勬祴璇晆rl.
http://localhost:9080/cn.iwoo/spring/b?method=doSearch
http://localhost:9080/cn.iwoo/spring/b/doSearch
http://localhost:9080/cn.iwoo/spring/b/page.html
娉?/b/鏄垜鐨刢ontroller鐨勬槧灝勫墠緙,鍦≒ropertiesMethodNameResolver鐨刴appings閰嶇疆閲岄潰,緗戝潃蹇呴』鏄?b/寮澶?涔熷氨鏄痗ontroller鐨勫墠緙涔熼渶
瑕佸啓榪涘幓. 榪欐槸鎴戞祴璇曠殑緇撴灉,涓嶇煡鏄惁蹇呴』榪欐牱.
execution
pointcut designator銆傛墽琛岃〃杈懼紡鐨勬牸寮忓涓嬶細execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
*
錛屽畠浠h〃浜嗗尮閰嶄換鎰忕殑榪斿洖綾誨瀷銆?涓涓叏縐伴檺瀹氱殑綾誨瀷鍚嶅皢鍙細鍖歸厤榪斿洖緇欏畾綾誨瀷鐨勬柟娉曘傚悕瀛楁ā寮忓尮閰嶇殑鏄柟娉曞悕銆?浣犲彲浠ヤ嬌鐢?*
閫氶厤絎︿綔涓烘墍鏈夋垨鑰呴儴鍒嗗懡鍚嶆ā寮忋?鍙傛暟妯″紡紼嶅井鏈夌偣澶嶆潅錛?/span>()
鍖歸厤浜嗕竴涓笉鎺ュ彈浠諱綍鍙傛暟鐨勬柟娉曪紝 鑰?(..)
鍖歸厤浜嗕竴涓帴鍙椾換鎰忔暟閲忓弬鏁扮殑鏂規(guī)硶錛堥浂鎴栬呮洿澶氾級銆?妯″紡 (*)
鍖歸厤浜嗕竴涓帴鍙椾竴涓換浣曠被鍨嬬殑鍙傛暟鐨勬柟娉曘?妯″紡 (*,String)
鍖歸厤浜嗕竴涓帴鍙椾袱涓弬鏁扮殑鏂規(guī)硶錛岀涓涓彲浠ユ槸浠繪剰綾誨瀷錛岀浜屼釜鍒欏繀欏繪槸String綾誨瀷銆?/span>execution(public * *(..))
execution(* set*(..))
AccountService
鎺ュ彛鐨勪換鎰忔柟娉曠殑鎵ц錛?/p>execution(* com.xyz.service.AccountService.*(..))
execution(* com.xyz.service.*.*(..))
execution(* com.xyz.service..*.*(..))
瀹炵幇浜?AccountService 鎺ュ彛鐨勭洰鏍囧璞$殑浠繪剰榪炴帴鐐癸紙鍦⊿pring AOP涓彧鏄柟娉曟墽琛岋級 錛?nbsp;
target(com.xyz.service.AccountService)'target'鍦╞inding form涓敤鐨勬洿澶氾細- 璇峰父瑙佷互涓嬭璁洪氱煡鐨勭珷鑺備腑鍏充簬濡備綍浣垮緱鐩爣瀵硅薄鍙互鍦ㄩ氱煡浣撳唴璁塊棶鍒扮殑閮ㄥ垎銆?nbsp;
浠諱綍涓涓彧鎺ュ彈涓涓弬鏁幫紝涓斿湪榪愯鏃朵紶鍏ョ殑鍙傛暟瀹炵幇浜?Serializable 鎺ュ彛鐨勮繛鎺ョ偣 錛堝湪Spring AOP涓彧鏄柟娉曟墽琛岋級
args(java.io.Serializable)'args'鍦╞inding form涓敤鐨勬洿澶氾細- 璇峰父瑙佷互涓嬭璁洪氱煡鐨勭珷鑺備腑鍏充簬濡備綍浣垮緱鏂規(guī)硶鍙傛暟鍙互鍦ㄩ氱煡浣撳唴璁塊棶鍒扮殑閮ㄥ垎銆?nbsp;
璇鋒敞鎰忓湪渚嬪瓙涓粰鍑虹殑鍒囧叆鐐逛笉鍚屼簬 execution(* *(java.io.Serializable))錛?args鍙湁鍦ㄥ姩鎬佽繍琛屾椂鍊欎紶鍏ュ弬鏁版槸鍙簭鍒楀寲鐨勶紙Serializable錛夋墠鍖歸厤錛岃宔xecution 鍦ㄤ紶鍏ュ弬鏁扮殑絳懼悕澹版槑鐨勭被鍨嬪疄鐜頒簡 Serializable 鎺ュ彛鏃跺欏尮閰嶃?nbsp;
鏈変竴涓?@Transactional 娉ㄨВ鐨勭洰鏍囧璞′腑鐨勪換鎰忚繛鎺ョ偣錛堝湪Spring AOP涓彧鏄柟娉曟墽琛岋級
浠諱綍涓涓洰鏍囧璞″0鏄庣殑綾誨瀷鏈変竴涓?@Transactional 娉ㄨВ鐨勮繛鎺ョ偣錛堝湪Spring AOP涓彧鏄柟娉曟墽琛岋級
浠諱綍涓涓墽琛岀殑鏂規(guī)硶鏈変竴涓?@Transactional annotation鐨勮繛鎺ョ偣錛堝湪Spring AOP涓彧鏄柟娉曟墽琛岋級
浠諱綍涓涓帴鍙椾竴涓弬鏁幫紝騫朵笖浼犲叆鐨勫弬鏁板湪榪愯鏃剁殑綾誨瀷瀹炵幇浜?@Classified annotation鐨勮繛鎺ョ偣錛堝湪Spring AOP涓彧鏄柟娉曟墽琛岋級
@args(com.xyz.security.Classified)'@args'涔熷彲浠ュ湪binding form涓嬌鐢細- 璇峰父瑙佷互涓嬭璁洪氱煡鐨勭珷鑺備腑鍏充簬濡備綍浣垮緱annotation瀵硅薄鍙互鍦ㄩ氱煡浣撳唴璁塊棶鍒扮殑閮ㄥ垎銆?/p>
緗戜笂鐨勮娉曠湡鏄壇鑾犱笉榻?鏈緇堟壘涓?span style="color: #009900">鑳借В鍐抽棶棰樼殑鏂規(guī)硶(鎶樿吘鎴戜竴涓嬪崍,蹇柉浜?
鍘熷洜錛?/span>
鍏朵腑asm-2.2.2.jar涓巃sm.jar瀛樺湪綾諱笂鐨勫啿紿侊紒錛侊紒
浣跨敤鍏朵腑涔嬩竴鎴栦袱鑰呴兘浣跨敤錛屽彲鑳戒細鍑虹幇濡備笅閿欒錛?br />java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit