- 浏览: 1098695 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
skyesx:
这是2PC实现,更常用的是一个柔性事务的实现,可以参考http ...
Spring分布式事务实现 -
ddbird:
这第一句就不严谨“分布式事务是指操作多个数据库之间的事务”,显 ...
Spring分布式事务实现 -
呵呵6666:
基于互联网支付系统的微服务架构分布式事务解决方案http:// ...
Spring分布式事务实现 -
小黄牛:
写得不错,交流群:472213887
Spring分布式事务实现 -
jiaoqf321456:
这明明是用的apache的压缩,给ant.jar有半毛钱关系吗 ...
使用ant.jar进行文件zip压缩
例子:
1.定义接口和实现(for interceptor)
2.Before Advice定义
3.After Advice定义
4.Around Advice定义
5.applicationContext.xml配置文件
附:通过名称选择方法
Pattern属性符:
. 符合任何单一字符 + 符合前一个字符一次或多次 * 符合前一个字符零次或多次
6.测试
7. 如果要为目标对象提供advice,必须要为其建立代理对象,如果程序规模很大时,一个个代理会很麻烦,spring提供了自动代理BeanNameAutoProxyCreator与 DefaultAdvisorAutoProxyCreator
BeanNameAutoProxyCreator:根据beanName进行自动代理.
spring配置:
8. 可以定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性,这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理,比如配置:
<!-- Spring声明式事务 –->
1.定义接口和实现(for interceptor)
public interface ITest { public abstract void doTest(int i); public abstract void executeTest(); } public class Test implements ITest{ public void doTest(int i){ System.out.println(i); } public void executeTest(){ for (int i=0;i<250000;i++){ } } }
2.Before Advice定义
import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; /** * 在方法调用联结点之前触发 * @author Administrator * */ public class TracingBeforeAdvice implements MethodBeforeAdvice{ public void before(Method m, Object[] args, Object target) throws Throwable{ System.out.println( "Hello world! (by " + this.getClass().getName() + ")"); } }
3.After Advice定义
import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; /** * 在方法调用联结点之后触发通知 * 只有在联结点在无异常的情况下获得返回值时才运行通知 * @author Administrator * */ public class TracingAfterAdvice implements AfterReturningAdvice{ public void afterReturning(Object object, Method m, Object[] args, Object target) throws Throwable { System.out.println("Hello world! (by " + this.getClass().getName() +")"); } }
4.Around Advice定义
import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; public class AroundAdvice implements MethodInterceptor{ public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println("Hello world! (by " + this.getClass().getName() +")"); invocation.getArguments()[0] = 20; invocation.proceed(); System.out.println("Goodbye! (by " + this.getClass().getName() + ")"); return null; } }
5.applicationContext.xml配置文件
<!--通知bean --> <bean id="theAroundAdvice" class="com.logcd.spring.aop.AroundAdvice"/> <bean id="theTracingBeforeAdvice" class="com.logcd.spring.aop.TracingBeforeAdvice"/> <bean id="theTracingAfterAdvice" class="com.logcd.spring.aop.TracingAfterAdvice"/> <!-- 将切入点定义与通知bean关联起来 --> <bean id="theTracingBeforeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice"> <ref local="theTracingBeforeAdvice" /> </property> <property name="patterns"> <list> <value>.*do.*</value> <value>.*execute.*</value> </list> </property> </bean>
附:通过名称选择方法
<bean id="theTracingBeforeAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="mappedName"> <!--可以使用mappedNames定义方法列表--> <value> doTest </value> <!-- 方法名 --> </property> <property name="advice"> <ref bean=" theTracingBeforeAdvice "/> </property> </bean>
Pattern属性符:
. 符合任何单一字符 + 符合前一个字符一次或多次 * 符合前一个字符零次或多次
<bean id="theTracingAfterAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice"> <ref local="theTracingAfterAdvice" /> </property> <property name="patterns"> <list> <value>.*do.*</value> <value>.*execute.*</value> </list> </property> </bean> <bean id="theAroundAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice"> <ref local="theAroundAdvice" /> </property> <property name="patterns"> <list> <value>.*do.*</value> </list> </property> </bean> <!—-受监控的对象--> <bean id="test" class="com.logcd.spring.aop.Test"/> <!—启动拦截--> <bean id="myAOPProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.logcd.spring.aop.ITest</value> </property> <!--是否强制使用CGLIB进行动态代理 <property name="proxyTargetClass"> <value>true</value> </property> --> <property name="target"> <ref local="test"/> </property> <property name="interceptorNames"> <list> <value>theTracingBeforeAdvisor</value> <value>theTracingAfterAdvisor</value> <value>theAroundAdvisor</value> </list> </property> </bean>
6.测试
public void testAOP() { ApplicationContext ctx=new FileSystemXmlApplicationContext("applicationContext.xml"); ITest test = (ITest) ctx.getBean("myAOPProxy"); test.doTest(10); test.executeTest(); }
7. 如果要为目标对象提供advice,必须要为其建立代理对象,如果程序规模很大时,一个个代理会很麻烦,spring提供了自动代理BeanNameAutoProxyCreator与 DefaultAdvisorAutoProxyCreator
BeanNameAutoProxyCreator:根据beanName进行自动代理.
spring配置:
<bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*test</value> </list> </property> <property name="interceptorNames"> <value>theAroundAdvisor</value> </property> </bean>
8. 可以定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性,这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理,比如配置:
<!-- Spring声明式事务 –->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> <property name="dataSource" ref="dataSource" /> </bean> <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="interceptorNames" value="transactionInterceptor" /> <property name="beanNames" value="*Dao,*Po,*Tao,*BatchDeal" /> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributeSource" ref="transactionAttributeSource" /> </bean> <bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource"> <property name="properties"> <props> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean>
发表评论
-
SpringBoot开发WebService之Axis
2019-07-14 23:56 4893一、服务器端发布WebService服务 1、POM.xml文 ... -
SpringBoot开发WebService之CXF
2019-07-14 23:56 1353一、在服务器端的WebSerivce服务发布 1、POM.xm ... -
SpringBoot项目非web方式启动
2019-07-03 17:02 48171、springboot 1.x中以非web方式启动 @S ... -
SpringBoot使用Druid数据库密码加密
2019-03-06 23:28 15281、生成公钥、私钥和密码加密串 java -cp drui ... -
Spring Annotation
2010-12-02 17:14 0Spring2.x引入了组件自动扫描机制,可以在类路径底 ... -
Spring分布式事务实现
2010-11-10 14:28 83207分布式事务是指操作多个数据库之间的事务,spring的 ... -
Spring3 Annotation + Hibernate3-jpa2.0 + CGLIB + 多数据源
2010-08-19 09:30 10527一、定义一个测试用Entity。 @Entity pub ... -
使用iBatis2.0
2010-05-26 10:20 0一、NULL问题 ibatis操作oracle数据库时, ... -
使用AspectJ LTW(Load Time Weaving)
2010-01-04 14:25 10792在Java 语言中,从 ... -
Spring2.0 AOP AspectJ 注释实现
2010-01-04 14:24 5595一、AOP基本概念 切面(Aspect): 一个关注点的模块 ... -
Spring + JPA + Hibernate配置
2010-01-04 14:24 34747<1>persistence.xml放到类路径下的 ... -
配置spring数据源
2009-11-06 16:47 1249配置一个数据源 Spring在第三方依赖包中包含了两 ... -
hibernate的dialect
2009-07-23 10:04 5462一、hibernate的dialect RDBM ... -
spring ibatis入门
2009-04-20 14:16 3895一、applicationContext.xml <?x ... -
Hibernate缓存配置/批量处理
2009-03-25 21:50 10974Hibernate除了自动对Se ... -
Hibernate的一级与二级缓存
2009-03-25 21:24 1717缓存是介于应用程序和物理数据源之间,其作用是为了降低应用 ... -
spring jdbcTemplate使用
2008-07-15 17:17 78227一、使用示例 (1)springJdbcContext.xml ... -
Spring2.X以AspectJ 式AOP 配置事务
2008-07-10 13:23 2101(1)配置: Spring的事务管理是通过AOP代理实 ... -
spring 事务管理
2008-07-08 16:35 12015声明式的事务管理(Declarative transactio ... -
Hibernate中one-to-many/many-to-one和many-to-many
2008-06-28 17:03 3979<1>one-to-many/many-to-on ...
相关推荐
Spring AOP,即面向切面编程,是Spring框架的核心组件之一,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。...通过学习和实践,你可以更好地在Spring框架中利用AOP解决实际问题。
本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...
Spring IOC AOP学习示例代码,包含Spring常用操作示例和所有所需jar文件。参考博客:http://blog.csdn.net/daijin888888/article/details/51735291
`spring-aop.xsd`文件是Spring AOP配置的XML Schema定义文件,用于指导和验证XML配置中的元素和属性,确保其符合规范,同时也为IDE提供代码提示和自动补全功能,提高开发效率。 在Java开发中,AOP(Aspect Oriented...
通过这个例子,你可以学习到如何在Spring.NET环境中实现AOP,理解动态代理的工作原理,并掌握如何在实际项目中应用AOP来提高代码的灵活性和可维护性。这将有助于你编写更加模块化、易于维护的软件系统。
通过这个实例工程,学习者可以直观地理解Spring AOP的工作原理,如何定义切面、配置通知以及如何在实际项目中应用。同时,它还能帮助开发者理解如何在不修改原始业务代码的情况下,实现通用功能的插入,提高代码的可...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
在Spring中,AOP主要用于处理系统级别的横切关注点,如日志、事务、安全性等。它通过定义切入点(Pointcut)和通知(Advice)来实现。切入点是程序执行流程中的某个特定位置,而通知是在切入点触发时执行的代码。 1...
学习这个Demo,你需要理解每个部分的作用,分析源代码中的注解和逻辑,了解它们是如何与Spring AOP机制配合的。此外,通过运行测试用例,观察输出结果,你可以更深入地理解AOP的实际效果和应用场景。 总的来说,...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过...这个例子提供了学习Spring AOP实际操作的宝贵资源,通过阅读源码和运行测试,你将对Spring AOP有更全面的认识。
《深入理解Spring AOP:2024春季学习项目指南》 ...通过这个2024春季AOP学习项目,开发者将有机会亲手实践上述概念,深入理解Spring AOP的精髓,从而在实际项目中更好地运用这一强大的工具,提升代码质量与工程效率。
当我们谈论"spring AspectJ aop学习"时,我们将深入探讨Spring AOP如何结合AspectJ来实现更灵活的模块化和解耦。 首先,让我们理解AOP的概念。面向切面编程(Aspect Oriented Programming)是一种编程范式,旨在将...
在本示例中,我们将深入探讨Spring框架的3.1版本中的核心概念之一:面向切面编程(Aspect-Oriented Programming,简称AOP)。AOP是Spring框架的强大特性,它允许我们在应用程序中实现关注点的分离,使得我们可以将横...
标题中的"spring-aop-4.2.xsd.zip"表明这是一个与Spring框架的AOP(面向切面编程)相关的资源,版本为...开发者可以通过解析和学习这个XSD文件,更好地掌握Spring AOP的配置语法,从而实现更高效和精确的面向切面编程。
在IT行业中,Spring框架无疑是Java开发领域的中流砥柱,而Spring AOP则是其核心组件之一。本资料包"spring-aop-4.2.6.RELEASE.zip"正是针对Spring AOP的一个重要版本,它与"spring-framework.zip"一同构成了强大的...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。本篇文章将详细探讨Spring实现AOP的四种主要方法:基于代理的方式、...
### Spring AOP 学习资料知识点总结 #### 一、Spring AOP 概念与背景 **Spring AOP**(面向切面编程)是Spring框架中的一个重要组成部分,它通过预定义的切入点来分离关注点,使得核心业务逻辑更加清晰,同时能够...
- **SpringAOP.avi**:可能是一个视频教程,详细讲解了Spring AOP的概念和实践。 - **SpringAOP.doc**:可能是文档教程,包含了详细的步骤和示例代码。 - **SpringAOP_src.rar**:源代码示例,供你参考和实践。 - **...
Spring AOP,全称为Aspect...在`section6-AOP`这个压缩包中,可能包含了演示Spring AOP使用的代码示例,可以直接导入项目进行学习和实践。通过深入理解和运用这些示例,可以更好地掌握Spring AOP的核心概念和实际应用。
**Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...