??xml version="1.0" encoding="utf-8" standalone="yes"?> Spring AOP 用户可能会经怋? 除了q回cd模式Q上面代码片断中的ret-type-patternQ,名字模式和参数模式以外,所有的部分都是可选的?q回cd模式军_了方法的q回cd必须依次匚w一个连接点?你会使用的最频繁的返回类型模式是 下面l出一些常见切入点表达式的例子?/p>
L公共Ҏ的执行: M一个以“set”开始的Ҏ的执行: 定义在service包里的Q意方法的执行Q?/p> 定义在service包或者子包里的Q意方法的执行Q?/p> within(com.xyz.service.*)在service包或者子包里的Q意连接点Q在Spring AOP中只是方法执行) Q?nbsp; within(com.xyz.service..*)实现?AccountService 接口的代理对象的Lq接点(在Spring AOP中只是方法执行) Q?nbsp; this(com.xyz.service.AccountService)'this'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得代理对象可以在通知体内讉K到的部分?nbsp; @target(org.springframework.transaction.annotation.Transactional)'@target' 也可以在binding form中用:请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内讉K到的部分?nbsp; @within(org.springframework.transaction.annotation.Transactional)'@within'也可以在binding form中用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内讉K到的部分?nbsp; @annotation(org.springframework.transaction.annotation.Transactional)'@annotation' 也可以在binding form中用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内讉K到的部分?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,q个可以Ҏh的参数来定一个需要调用的Ҏ?br />例如Q?a >http://www.sf.net/index.view?testParam=testItQ这个请求会调用名称为testIt的处理方法?br />
2 : InternalPathMethodNameResolverQ这个可以根据请求的路径名称来调用相应的Ҏ?br />例如Q?a >http://www.sf.net/testing.view,q个h会调用testingҎ?br />
3 : PropertiesMethodNameResolverQ这个可以根据一个URLs 映射列表来调用相应的Ҏ?br />例如Q如果定义了/index/welcome.html=doItQ那么当h?index/welcome.htmlӞ会调用doItҎ。在定义URLs时可以用通配W?**/welcom?.html
ParameterMethodNameResolver
InternalPathMethodNameResolver
PropertiesMethodNameResolver
配置web.xml
Java代码
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>
定义一个Controllerl承与MultiActionController
Java代码
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. }
Ҏ的定义必ȝ合下面的格式
Java代码
1. public (ModelAndView | Map | String | void) actionName(HttpServletRequest request, HttpServletResponse response);
定义ViewResolver
Java代码
1. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
热点推荐
中国民间术、原来如?br />癑ּ三维立体?br />C交CgA讲
75
Z么要使用三家肉不能吃的中国各省人口排发醒:一个一个h的世?br />新概念英语学习英语名人名a
l典感悟的十个现实生zM的你[原创
壮哉Q?br />落伍没?盘点
宁静Q音画)
l想q事的h以卫星电视初学者相x?
Spring架构设计-增强MultiActionController
MultiActionControllerl定command
Spring的MultiActionController使用
推荐圈子: GT-Grid
更多相关推荐
Google
Java
Spring Wire
MVC
Compression Spring
关闭
MultiActionController?UMethodNameResolver的配|?a >http://www.360doc.com/content/10/0329/17/968587_20...
W????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代码
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代码
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代码
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的测试url.
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/是我的controller的映前~,在PropertiesMethodNameResolver的mappings配置里面,|址必须?b/开?也就是controller的前~也需
要写q去. q是我测试的l果,不知是否必须q样.
execution
pointcut designator。执行表辑ּ的格式如下:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
*
Q它代表了匹配Q意的q回cd?一个全U限定的cd名将只会匚wq回l定cd的方法。名字模式匹配的是方法名?你可以?*
通配W作为所有或者部分命名模式?参数模式E微有点复杂Q?/span>()
匚w了一个不接受M参数的方法, ?(..)
匚w了一个接受Q意数量参数的ҎQ零或者更多)?模式 (*)
匚w了一个接受一个Q何类型的参数的方法?模式 (*,String)
匚w了一个接受两个参数的ҎQ第一个可以是LcdQ第二个则必LStringcd?/span>execution(public * *(..))
execution(* set*(..))
AccountService
接口的Q意方法的执行Q?/p>execution(* com.xyz.service.AccountService.*(..))
execution(* com.xyz.service.*.*(..))
execution(* com.xyz.service..*.*(..))
实现?AccountService 接口的目标对象的Lq接点(在Spring AOP中只是方法执行) Q?nbsp;
target(com.xyz.service.AccountService)'target'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得目标对象可以在通知体内讉K到的部分?nbsp;
M一个只接受一个参敎ͼ且在q行时传入的参数实现?Serializable 接口的连接点 Q在Spring AOP中只是方法执行)
args(java.io.Serializable)'args'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得Ҏ参数可以在通知体内讉K到的部分?nbsp;
h意在例子中给出的切入点不同于 execution(* *(java.io.Serializable))Q?args只有在动态运行时候传入参数是可序列化的(SerializableQ才匚wQ而execution 在传入参数的{声明的类型实C Serializable 接口时候匹配?nbsp;
有一?@Transactional 注解的目标对象中的Q意连接点Q在Spring AOP中只是方法执行)
M一个目标对象声明的cd有一?@Transactional 注解的连接点Q在Spring AOP中只是方法执行)
M一个执行的Ҏ有一?@Transactional annotation的连接点Q在Spring AOP中只是方法执行)
M一个接受一个参敎ͼq且传入的参数在q行时的cd实现?@Classified annotation的连接点Q在Spring AOP中只是方法执行)
@args(com.xyz.security.Classified)'@args'也可以在binding form中用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内讉K到的部分?/p>
|上的说法真是良莠不?最l找?span style="color: #009900">能解决问题的Ҏ(折腾我一下午,快疯?
原因Q?/span>
其中asm-2.2.2.jar与asm.jar存在cM的冲H!Q!
使用其中之一或两者都使用Q可能会出现如下错误Q?br />java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit