`
chella
  • 浏览: 32880 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

以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;
@Aspect
public 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 class="com.travelsky.aop.advice.serviceAdvice" /> 
</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"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath*:config.properties</value>
			</list>
		</property>
	</bean>

	<!-- 支持 @Transactional 标记 -->
	<tx:annotation-driven />

	<!-- 支持 @AspectJ 标记-->
	<aop:aspectj-autoproxy proxy-target-class="true"/>

	<!-- 以AspectJ方式 定义 AOP -->
	<aop:config proxy-target-class="true">
		<aop:advisor
			pointcut="execution(* com.travelsky.bravo.components..*Manager.*(..))"
			advice-ref="txAdvice" />
		<aop:advisor
			pointcut="execution(* com.travelsky.bravo.core..*Manager.*(..))"
			advice-ref="txAdvice" />			
		<aop:advisor
			pointcut="execution(* com.travelsky.bravo.core.dao..*DaoImpl.*(..))"
			advice-ref="txAdvice" />
		<aop:advisor
			pointcut="execution(* com.travelsky.bravo.core.dao..*Dao.*(..))"
			advice-ref="txAdvice" />
		<aop:advisor
			pointcut="execution(* com.travelsky.agentsky..*Manager.*(..))"
			advice-ref="txAdvice" />
		<aop:advisor
			pointcut="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>

 

分享到:
评论

相关推荐

    AOP的AspectJ实现方案来做语言切换

    5. **声明式事物管理**:在Spring框架中,AspectJ可以用来实现声明式事务管理。通过在切面中定义事务边界,可以确保在出现异常时自动回滚事务,无需在业务代码中显式处理。 6. **AspectJ的使用**:使用AspectJ通常...

    SSM中事务管理所需的jar包-aspectjweaver

    `aspectjweaver.jar`是AspectJ库的一个组成部分,它在SSM中的主要作用是实现AOP(面向切面编程)来处理事务。本文将详细讲解SSM框架中事务管理的概念、AspectJ的作用以及`aspectjweaver.jar`在事务管理中的应用。 1...

    SSI框架搭建实例教程(struts spring ibatis整合 附切面事物处理)

    - 使用`&lt;aop:aspectj-autoproxy&gt;`启用对`@AspectJ`注解的支持,这是Spring AOP(面向切面编程)的一部分,允许我们在代码中定义切面,以实现如日志记录、事务处理等通用功能。 6. **整合流程** - 创建Action类...

    spring-tx事物源码

    这可以是基于代理的(JDK或CGLIB代理)或基于AspectJ的AOP实现。 5. **@Transactional注解**:这是声明式事务管理的关键,可以在方法上使用,表示该方法应该在一个事务内运行。注解可以指定事务属性,如隔离级别、...

    spring事物管理配置的5种方式

    这种方式会自动为带有`@Transactional`注解的方法创建AspectJ代理,无需额外的`aop:config`。 综上所述,Spring提供了灵活多样的事务管理配置方式,可以根据项目需求选择适合的方案。理解并熟练运用这些配置,将有...

    spring配置事物的5种方式

    3. **代理机制**:Spring通过代理机制实现事务控制,包括AOP(面向切面编程)代理和JDK动态代理。代理机制是决定事务策略的关键部分,它决定了事务如何在方法调用间传播。 接下来,我们将详述Spring配置事务的五种...

    Spring杂谈

    - **AspectJ切入点语法**:Spring AOP支持基于AspectJ切入点表达式语言来定义切点。 ### 资源管理 Spring的资源抽象使得访问不同类型的资源变得容易,如文件系统、类路径或者URL等。 - **Resource接口**:定义了...

    spring jar包

    1.spring-aop:面向切面AOP编程中需要使用。声明式事物也用到此包。 2.spring-aspects:提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如Eclipse AJDT。 3.spring-beans:基础jar包,它包含...

    oopinspring:Spring入门(Java)面向对象的原理和理解

    - AspectJ:Spring支持AspectJ注解和切面,进一步增强AOP功能。 - 自动装配(Auto-Wiring):Spring容器可以自动检测和配置Bean之间的依赖关系。 - 静态工厂方法和实例工厂方法:Spring允许使用工厂方法创建Bean...

Global site tag (gtag.js) - Google Analytics