新搭建了一个环境,方便测试相关代码。
中间出现了几个小问题,折腾了半天,还好搞定。
1. 因为controller继承了multiactioncontroller,想配置BeanNameUrlHandlerMapping来替换默认的internal...Mapping,但是只是配置了bean定义,没有组装到自定义的bean模版中去,导致一直没有生效。
<bean id="methodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="action" />
</bean>
<!--
注意,multicontroller默认的是internalResolver,如果要替换其他的,则必须 显示的 指定!!!!!!!!!
public class MultiActionController extends AbstractController
implements LastModified { /** Delegate that knows how to determine
method names from incoming requests */ private MethodNameResolver
methodNameResolver = new InternalPathMethodNameResolver(); }
-->
<bean id="baseController" abstract="true">
<property name="methodNameResolver" ref="methodNameResolver"></property>
</bean>
2.后又想配置ViewResolver,开始配置的是xstViewResolver,结果不好用,老是报不能编译样式表的错误。后来配置UrlBasedViewResolver,又忘记配置viewClass属性。
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/myweb"></property>
<property name="suffix" value=".jsp"></property>
</bean>
3.想验证一下AOP.然后配置了pointcut,advice,advisor,还有proxyfactorybean.
结果不生效。
搞了半天,问题出在我往controller中注入的还是之前的service,而不是通过proxyfactorybean生成的service。
所以把service的定义改成下边的样子,注入的时候用welcomeService这个名称。
<bean id="welcomeService" parent="baseTxProxy">
<property name="target">
<bean class="com.myweb.welcome.service.WelocomeService">
</bean>
</property>
</bean>
其中baseTxProxy就是proxyfactorybean模版定义
<bean id="aopProxy" class="org.springframework.aop.framework.ProxyFactoryBean"
abstract="true" lazy-init="true">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="interceptorNames">
<value>welcomeAdvisor</value>
</property>
</bean>
4.后来看到另外一种简单的方式,就是用DefaultAdvisorAutoProxyCreator,这个会自动检查配置的advisor。这样只需要配置各种advisor即可。当中出现的问题是pointcut定义时的partern利用的正则表达式一直没有搞明白(注:最后发现是路径写错了,晕。com.asd.efg.asd.*中间一个路径漏写了。)。
5.中间小插曲就是打印的log一直打印不出来,后来发现是类中引用的logger不是log4j的jar中的,但是配置文件又是针对log4j的。统一后搞定。可能是因为lib中引入的jar太多造成的混乱。
中间出现了几个小问题,折腾了半天,还好搞定。
1. 因为controller继承了multiactioncontroller,想配置BeanNameUrlHandlerMapping来替换默认的internal...Mapping,但是只是配置了bean定义,没有组装到自定义的bean模版中去,导致一直没有生效。
<bean id="methodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="action" />
</bean>
<!--
注意,multicontroller默认的是internalResolver,如果要替换其他的,则必须 显示的 指定!!!!!!!!!
public class MultiActionController extends AbstractController
implements LastModified { /** Delegate that knows how to determine
method names from incoming requests */ private MethodNameResolver
methodNameResolver = new InternalPathMethodNameResolver(); }
-->
<bean id="baseController" abstract="true">
<property name="methodNameResolver" ref="methodNameResolver"></property>
</bean>
2.后又想配置ViewResolver,开始配置的是xstViewResolver,结果不好用,老是报不能编译样式表的错误。后来配置UrlBasedViewResolver,又忘记配置viewClass属性。
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/myweb"></property>
<property name="suffix" value=".jsp"></property>
</bean>
3.想验证一下AOP.然后配置了pointcut,advice,advisor,还有proxyfactorybean.
结果不生效。
搞了半天,问题出在我往controller中注入的还是之前的service,而不是通过proxyfactorybean生成的service。
所以把service的定义改成下边的样子,注入的时候用welcomeService这个名称。
<bean id="welcomeService" parent="baseTxProxy">
<property name="target">
<bean class="com.myweb.welcome.service.WelocomeService">
</bean>
</property>
</bean>
其中baseTxProxy就是proxyfactorybean模版定义
<bean id="aopProxy" class="org.springframework.aop.framework.ProxyFactoryBean"
abstract="true" lazy-init="true">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="interceptorNames">
<value>welcomeAdvisor</value>
</property>
</bean>
4.后来看到另外一种简单的方式,就是用DefaultAdvisorAutoProxyCreator,这个会自动检查配置的advisor。这样只需要配置各种advisor即可。当中出现的问题是pointcut定义时的partern利用的正则表达式一直没有搞明白(注:最后发现是路径写错了,晕。com.asd.efg.asd.*中间一个路径漏写了。)。
5.中间小插曲就是打印的log一直打印不出来,后来发现是类中引用的logger不是log4j的jar中的,但是配置文件又是针对log4j的。统一后搞定。可能是因为lib中引入的jar太多造成的混乱。