读书人

以AspectJ兑现AOP事物

发布时间: 2012-09-27 11:11:17 作者: rapoo

以AspectJ实现AOP事物

1 使用Annotation方式
spring依赖库
* SPRING_HOME/dist/spring.jar
* SPRING_HOME/lib/jakarta-commons/commons-logging.jar
* SPRING_HOME/lib/log4j/log4j-1.2.14.jar
* SPRING_HOME/lib/aspectj/*.jar

使用Aspect定义切入点

package com.travelsky.aop.aspect; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.AfterReturning; @Aspect public class serviceAspect {    @Pointcut("execution(* com.travelsky.service..*.*(..))")    public void doBeforeService() {   }    @Pointcut("execution(* com.travelsky.service..*.*(..))")    public void doAfterService() {   } } 

?

定义advice

package com.travelsky.aop.advice; import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;@Aspectpublic class serviceAdvice{  @Before("com.travelsky.aop.aspect.serviceAspect.doBeforeService()")  public void doAccessCheck() {// ...System.out.println("Aop: do before service.");   }  @AfterReturning("com.travelsky.aop.aspect.serviceAspect.doAfterService()")  public void logInfo() {// ...System.out.println("Aop: do after service");  }}

?

在Spring配置文件applicationContext.xml中配置

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"default-autowire="byName" default-lazy-init="true"><aop:aspectj-autoproxy /> <bean /> </bean> 

?

2 配置文件方式
spring依赖库
* SPRING_HOME/dist/spring.jar
* SPRING_HOME/lib/jakarta-commons/commons-logging.jar
* SPRING_HOME/lib/log4j/log4j-1.2.14.jar
* SPRING_HOME/lib/aspectj/*.jar

?

在applicationContext.xml中配置

<aop:config>   <!-- 被切入的切面类-->   <aop:aspect id="security" ref="securityHandler">    <!-- 要切入的点(针对哪个切入。表达式方法声明匹配被切入的类及其方法) -->    <aop:pointcut id="allAddMethod" expression="execution(* com.travelsky.security.UserManagerImpl.add*(..))"/>     <!-- 声明切面类的要切入方法及具体位置 -->    <aop:before method="checkSecurity" pointcut-ref="allAddMethod"/>    </aop:aspect></aop:config>

?

3 给出一个生产中实际使用的AspectJ管理AOP事物的配置文件(配置方式实现)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"default-autowire="byName" default-lazy-init="true"><!-- 属性文件读入 --><bean id="propertyConfigurer"/><aop:advisorpointcut="execution(* com.travelsky.bravo.core..*Manager.*(..))"advice-ref="txAdvice" /><aop:advisorpointcut="execution(* com.travelsky.bravo.core.dao..*DaoImpl.*(..))"advice-ref="txAdvice" /><aop:advisorpointcut="execution(* com.travelsky.bravo.core.dao..*Dao.*(..))"advice-ref="txAdvice" /><aop:advisorpointcut="execution(* com.travelsky.agentsky..*Manager.*(..))"advice-ref="txAdvice" /><aop:advisorpointcut="execution(* com.travelsky.agentsky.ws..*AgentSkyWS4GF.*(..))"advice-ref="txAdvice" /></aop:config><!-- 基本事务定义,使用transactionManager作事务管理,默认get*方法的事务为readonly,      数据操作方法事物为rollback 其余方法按默认设置. --><tx:advice id="txAdvice"><tx:attributes><tx:method name="get*" read-only="true" /><tx:method name="find*" read-only="true" /><tx:method name="save*"  rollback-for="Exception"/>                <tx:method name="insert*" rollback-for="Exception" />                <tx:method name="remove*" rollback-for="Exception"/>               <tx:method name="add*" no-rollback-for="Exception" /><tx:method name="*" /></tx:attributes></tx:advice> </beans>

?

读书人网 >ASP

热点推荐