`

spring2.0配置

阅读更多
Spring 2.0的新配置:
如果如果service没有基于接口,使用cgilib来实现AOP,定义proxy-target-class="true"
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* com.cutoff.service..*Manager.*(..))" advice-ref="transactionAdvice"/>
//这里是spring例子自带的,可以实现自定义的advice,在每次save动作完成后。会触发emailAdvice
Java代码 复制代码
  1.     <aop:advisor pointcut="execution(* com.cutoff.service..*Manager.save(..))" advice-ref="emailAdvice"/>        
  2. </aop:config>   
  3.   
  4. <tx:advice id="transactionAdvice" transaction-manager="transactionManager">   
  5.     <tx:attributes>   
  6.         <tx:method name="get*" read-only="true"/>    
  7.         <tx:method name="find*" read-only="true"/>    
  8.         <tx:method name="insert*" />    
  9.         <tx:method name="update*" />    
  10.         <tx:method name="save*" />    
  11.     </tx:attributes>   
  12. </tx:advice>   
  13.   
  14. <bean id="emailAdvice" class="org.springframework.samples.jpetstore.domain.logic.SendOrderConfirmationEmailAdvice">   
  15.     <property name="mailSender" ref="mailSender"/>   
  16. </bean>   
  17.   
  18. <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">   
  19.     <property name="host" value="${mail.host}"/>   
  20. </bean>   
		<aop:advisor pointcut="execution(* com.cutoff.service..*Manager.save(..))" advice-ref="emailAdvice"/>		
	</aop:config>

	<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="get*" read-only="true"/> 
			<tx:method name="find*" read-only="true"/> 
			<tx:method name="insert*" /> 
			<tx:method name="update*" /> 
			<tx:method name="save*" /> 
		</tx:attributes>
	</tx:advice>
	
	<bean id="emailAdvice" class="org.springframework.samples.jpetstore.domain.logic.SendOrderConfirmationEmailAdvice">
		<property name="mailSender" ref="mailSender"/>
	</bean>
	
	<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="host" value="${mail.host}"/>
	</bean>
	
唯一有点难懂的是pointcut里的语法,其实也很好学,Spring参考文档6.2.3.4 示例里有完整说明 ,其实一排子过去是

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)其中带问号的modifiers-pattern?(public/protected) 和 declaring-type-pattern? throws-pattern? 可以不填

execution(* *..BookManager.save(..))的解读:
第一颗* 代表ret-type-pattern 返回值可任意,
*..BookManager 代表任意Pacakge里的BookManager类。
如果写成com.xyz.service.* 则代表com.xyz.service下的任意类
com.xyz.service..* com.xyz.service则代表com.xyz.service及其子package下的任意类
save代表save方法,也可以写save* 代表saveBook()等方法
(..) 匹配0个参数或者多个参数的,任意类型
(x,..) 第一个参数的类型必须是X
(x,,,s,..) 匹配至少4个参数,第一个参数必须是x类型,第二个和第三个参数可以任意,第四个必须是s类型。
注意事项:
1. name-pattern千万不要写成*..*Manager ,这样子会把所有第三方类库的Manager比如Spring的PlatformTranstationManager 也加入aop,非常危险。所以最好还是加上项目的package前缀,如"org.springside..*Manager"

2. 因为有*,会修饰所有方法,有些hibernateTemplate的final的方法不能被cglib修改,会抛warning,无害。

4. 事务定义选项
事务定义一般默认的PROPAGATION_REQUIRED即可,另提供的几个选择很少使用。值得注意的是一个PROPAGATION_NESTED,嵌入式事务的意义在于多级事务,如果出错只rollback子事务自己,不rollback主事务的所有操作。比如OrderManager的shipOrder函数 调用 save函数,如果save()被定义为嵌入式事务,当进入save()时,会存储save point。如果在save 中出错,会rollback 到刚才的save point,但不影响其他的操作。这需要JDBC3.0 SavePoint功能的支持。 而一般service间互相嵌入调用时,如果都定义为PROPAGATION_REQUIRED,有其中一个操作出错,rollback全部操作。
分享到:
评论

相关推荐

    struts2+hibernate3.2+spring2.0配置+入门实例

    struts2+hibernate3.2+spring2.0配置+入门实例.doc

    Spring2.0的配置

    看着有用就自己下载吧

    spring2.0技术手册

    林信良著 spring2.0技术手册 《Spring 2.0技术手册》介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与...

    struts2+hibernate3.2+spring2.0配置+入门实例与正则表达式.rar.chm

    struts2+hibernate3.2+spring2.0配置+入门实例与正则表达式.rar.chm

    Spring2.0技术手册(林信良)_part2

    本书介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者...

    spring2.0声明式事务

    3. spring2.0配置事务 a) 将spring 1.2升级到spring2.0 i. 去掉spring1.2相关的包 ii. 添加spring2.0的jar包:spring.jar,aspecjrt.jar,aspectjweaver.jar 和cglib-nodep-2.1.3,jar iii. 修改spring配置文件,增加...

    Spring2.0技术手册

    本书介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者...

    spring2.0(中文)

    本书介绍了Spring2.0的新特性,诸如Spring2.0的新配置、新AOP支持、增强的IOC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者摸索...

    spring2.0技术手册+源代码

    本书介绍了Spring2.0的新特性,诸如Spring2.0的新配置、新AOP支持、增强的IOC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者摸索...

    struct1.2+ hibernate3.0+spring2.0 例子

    struct1.2+ hibernate3.0+spring2.0 例子,主要是有JAR包和配置文件

    Spring2.0的配置2

    接着spring2.0的配置后写的东西

    Spring2.0技术手册(林信良)_part1

    本书介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者...

    spring2.0framework.doc

    相关提示,请引用新的Spring 2.0 DTD以使用基于XML Schema的配置。下面给出了DOCTYPE声明,如果有兴趣的读者可以详细阅读Spring 2.0发布包的 'dist/resources'目录中的'spring-beans-2.0.dtd' DTD

    spring cloud2.0 eureka server spring security配置

    spring cloud2.0 eureka server spring security配置,与spring cloud1.X还是有很大区别

    手把手struts2.0+hibernate3.1+spring2.0环境配置和实验指导

    综合运用struts2.0+hibernate3+spring2.0开发一个简单的应用,掌握开发步骤和基本,掌握各个模块的功能及相互之间的关系。

    基于Spring2.0的Collection配置使用例子

    CollectionDemo.rar 基于Spring2.0的Collection配置使用例子

Global site tag (gtag.js) - Google Analytics