- 浏览: 150199 次
- 性别:
- 来自: 彩虹之巅
最新评论
-
qq970836452:
[url][img][url][url][img][url][ ...
spring中配置声明式事务的几种方式 -
qq970836452:
[img][/img]
spring中配置声明式事务的几种方式 -
qq970836452:
[*]
spring中配置声明式事务的几种方式 -
qq970836452:
[img]||[/img][img][/img][url][u ...
spring中配置声明式事务的几种方式 -
qq970836452:
[img][/img][img][/img][url][url ...
spring中配置声明式事务的几种方式
部分例子摘自 spring in action
(1)使用ProxyFactoryBean的代理
package chapter4; public interface Performable { public void perform() throws Exception; } package chapter4; import java.util.Random; public class Artist implements Performable { public void perform() throws Exception { int num = new Random().nextInt(100); if(num >= 50) { throw new Exception(String.valueOf(num)); } else { System.out.println(num); } } } package chapter4; public class Audience { public Audience() { } public void takeSeats() { System.out.println("The audience is taking their seats."); } public void turnOffCellPhones() { System.out.println("The audience is turning off " + "their cellphones"); } public void applaud() { System.out.println("CLAP CLAP CLAP CLAP CLAP"); } public void demandRefund() { System.out.println("Boo! We want our money back!"); } } package chapter4; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; import org.springframework.aop.MethodBeforeAdvice; import org.springframework.aop.ThrowsAdvice; public class AudienceAdvice implements MethodBeforeAdvice, AfterReturningAdvice, ThrowsAdvice { private Audience audience; public void setAudience(Audience audience) { this.audience = audience; } public void before(Method method, Object[] args, Object target) throws Throwable { audience.takeSeats(); audience.turnOffCellPhones(); } public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { audience.applaud(); } public void afterThrowing(Exception ex) { audience.demandRefund(); } }
<?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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean id="audience" class="chapter4.Audience" /> <bean id="audienceAdvice" class="chapter4.AudienceAdvice" > <property name="audience" ref="audience" /> </bean> <bean id="audienceAdvisor" class="org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor"> <property name="advice" ref="audienceAdvice" /> <property name="expression" value="execution(* *.perform(..))" /> </bean> <bean id="artistTarget" class="chapter4.Artist" /> <bean id="artist" class="org.springframework.aop.framework.ProxyFactoryBean" > <property name="target" ref="artistTarget" /> <property name="interceptorNames" value="audienceAdvisor" /> <property name="proxyInterfaces" value="chapter4.Performable" /> </bean> </beans>
(2)隐式使用ProxyFactoryBean的aop代理
DefaultAdvisorAutoProxyCreator实现了BeanPostProcessor,它将自动检查advisor的pointcut是否匹配bean的方法,如果匹配会替换bean为一个proxy,并且应用其advice。
<?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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" /> <bean id="audience" class="chapter4.Audience" /> <bean id="audienceAdvice" class="chapter4.AudienceAdvice" > <property name="audience" ref="audience" /> </bean> <bean id="audienceAdvisor" class="org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor"> <property name="advice" ref="audienceAdvice" /> <property name="expression" value="execution(* *.perform(..))" /> </bean> <bean id="artist" class="chapter4.Artist" /> </beans>
(3)使用注解的aop代理
xml中增加了一个<aop:aspectj-autoproxy />,它创建了AnnotationAwareAspectJAutoProxyCreator在spring中,这个类将自动代理匹配的类的放方法。和上个例子中DefaultAdvisorAutoProxyCreator做同样的工作。
package chapter4; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect public class Audience { public Audience() { } @Pointcut("execution(* *.perform(..))") public void pointcut(){} @Before("pointcut()") public void takeSeats() { System.out.println("The audience is taking their seats."); } @Before("pointcut()") public void turnOffCellPhones() { System.out.println("The audience is turning off " + "their cellphones"); } @AfterReturning("pointcut()") public void applaud() { System.out.println("CLAP CLAP CLAP CLAP CLAP"); } @AfterThrowing("pointcut()") public void demandRefund() { System.out.println("Boo! We want our money back!"); } }
<?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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <aop:aspectj-autoproxy /> <bean id="audience" class="chapter4.Audience" /> <bean id="artist" class="chapter4.Artist" /> </beans>
(4)使用aop配置文件的自动代理
采用这种方法,不用加<aop:aspectj-autoproxy />
package chapter4; import org.aspectj.lang.annotation.Aspect; @Aspect public class Audience { public Audience() { } public void pointcut() { } public void takeSeats() { System.out.println("The audience is taking their seats."); } public void turnOffCellPhones() { System.out.println("The audience is turning off " + "their cellphones"); } public void applaud() { System.out.println("CLAP CLAP CLAP CLAP CLAP"); } public void demandRefund() { System.out.println("Boo! We want our money back!"); } }
<?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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean id="audience" class="chapter4.Audience" /> <aop:config> <aop:aspect ref="audience"> <aop:before method="takeSeats" pointcut="execution(* *.perform(..))" /> <aop:before method="turnOffCellPhones" pointcut="execution(* *.perform(..))" /> <aop:after-returning method="applaud" pointcut="execution(* *.perform(..))" /> <aop:after-throwing method="demandRefund" pointcut="execution(* *.perform(..))" /> </aop:aspect> </aop:config> <bean id="artist" class="chapter4.Artist" /> </beans>
发表评论
-
spring中配置声明式事务的几种方式
2009-06-30 18:31 2901(1)通过TransactionProxyFactoryBea ... -
hibernate实战(第2版)读书笔记(一)
2009-05-28 09:38 3071最近时间重读hibernate实战(第2版),哈哈,很长时间不 ... -
SWT中使用Opengl画圆的例子
2009-03-09 22:26 5377import org.eclipse.opengl.GL; i ... -
Windows下VC6配置Opengl开发环境
2009-03-05 08:14 4798最近需要了解下Opengl,于是开始鼓捣Opengl,从网上下 ... -
用SWT写的简单的通讯录
2009-01-19 12:32 1951用SWT写了个简单的通讯录,管理自己的手机号, -
用SWT做的简单的文件浏览器
2009-01-03 17:55 2879一个用swt做的简单的文件浏览器, package hell ... -
hibernate3 one-ton-one总结之关联表关联实现one-to-one
2008-11-08 19:29 1624在hibernate3中,one-to-one关联主要通过3种 ... -
hibernate3 one-to-one总结之主外键关联
2008-11-08 19:21 2601在hibernate3中,one-to-one关联主要通过3种 ... -
hibernate3 one-to-one总结之共享的关联主键
2008-11-08 19:14 2379在hibernate3中,one-to-one关联主要通过3种 ... -
hibernate3中使用hsql的sequence生成主键
2008-10-25 09:58 3063今天,想尝试下使用hsql的sequence来作为hibern ... -
js dtree的简单应用
2008-09-25 19:54 3358前几天在javaeye上看到有这样一个帖子(http://ww ... -
怎么样让ibatis原生支持C3P0
2008-09-03 08:02 2372昨天,在javaeye上看到一个帖子,http://www.i ... -
在IE和Firefox都通用的弹出对话框
2008-08-15 06:44 4442test.html <!DOCTYPE html PUB ... -
JAVA版 俄罗斯方块
2008-07-26 11:00 3777把以前写的程序拿出来晒晒 -
JAVA版 连连看
2008-07-07 20:26 6379以前写的连连看,大家共同玩下。 -
彻底解决超链接提交中文乱码问题
2008-04-26 11:08 27029在网页中的超链接,例如 <a href="/s ... -
使用JAVA在JSP中生成饼图
2008-03-25 16:27 3842通过在服务器端生成图片 然后这样在页面中的图片可以真正的跨浏览 ... -
JSP 分页
2008-02-26 12:59 2890package examples; import java. ... -
设计模式之 Visitor
2007-12-12 14:27 1409package designpattern; pub ... -
设计模式之 Intercepting Filter
2007-12-12 14:13 2397package filter; public int ...
相关推荐
本文主要介绍几种常见的Spring AOP配置方式,并通过具体的示例来说明每种配置的特点。 #### 二、AOP配置所需基本元素 配置AOP时需要以下三个基本元素: 1. **Advice**:这是实际执行的代码,即我们所说的“切面”...
本篇文章将深入探讨Spring AOP的四种常见实现方式。 一、基于接口的代理(Interface-Based Proxy) 这是Spring AOP最基础的实现方式,适用于目标对象实现了特定接口的情况。Spring会创建一个代理对象,该对象实现...
在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录、事务管理、性能监控等。在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知...
6. 目标对象(Target Object):被AOP代理的对象。 7. 代理(Proxy):AOP框架创建的对象,它实现了目标对象的所有接口并拦截方法调用以执行通知。 在Spring配置文件中,我们可以通过以下方式引用`spring-aop.xsd`...
Spring AOP有两种实现方式:代理模式和注解驱动。代理模式分为JDK动态代理和CGLIB代理。JDK动态代理适用于实现了接口的目标对象,它通过实现InvocationHandler接口创建代理对象。而CGLIB代理则是在运行时为类生成...
### Spring AOP 几种配置方式详解 #### 一、Spring AOP 概述 Spring AOP(面向切面编程)是一种强大的编程模式,用于在应用程序中管理横切关注点,如日志记录、安全控制等。Spring 提供了多种方式来支持 AOP 的...
在Spring AOP中,主要有以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,包含pointcut(切点)和advice(通知)两部分。例如,在上述代码中的`PersonProxy`类就是一个切面,它定义了`before()`和...
### Spring框架+SpringAOP动态代理 #### 一、Spring AOP 动态代理概述 在探讨Spring AOP(Aspect-Oriented Programming,面向切面编程)中的动态代理之前,我们首先简要回顾一下AOP的基本概念。面向切面编程是一种...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架的一个核心特性,它提供了一种模块化和声明式的方式来处理程序中的交叉关注点,如日志、事务管理、性能监控等。AOP的主要思想是将这些横切关注点与...
1. **配置AOP支持**:在Spring的配置文件(如`applicationContext.xml`)中,开启AOP代理。可以使用`<aop:aspectj-autoproxy/>`标签来启用基于注解的AOP支持。 2. **定义切面**:创建一个Java类,该类代表切面,...
在Spring框架中,AOP可以通过基于XML的配置或者基于注解的方式实现。但在实际开发过程中,可能会遇到配置好的AOP切面不生效的问题,本文将针对这一现象进行深入分析,并提供相应的解决方案。 #### 一、问题定位 当...
除了使用 AspectJ 进行 AOP 开发之外,Spring 还提供了另外两种方式来实现 AOP: 1. **基于注解的配置**:通过在切面类和方法上使用特定的注解来定义切面和通知。 2. **基于 XML 的配置**:通过 XML 文件来配置切面...
描述提到“spring里的3个包”,这可能是指Spring AOP模块中涉及的几个核心包或组件: 1. **org.springframework.aop**:这是Spring AOP的基础包,包含了AOP的核心接口和类,如`Aspect`、`Advice`、`Pointcut`和`...
Spring AOP(面向切面编程)是Java开发中Spring框架的核心特性之一,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。在SSH(Struts、Spring、Hibernate)经典企业级开发框架中,Spring AOP扮演着至...
在Spring AOP 4.3.10中,我们主要关注以下几个关键知识点: 1. **切面(Aspect)**:切面是AOP的核心概念,它封装了多个相关操作,包括通知(Advice)、引入(Introduction)、目标对象(Target Object)、织入...
Spring AOP通过以下几种方式实现切片: 1. **定义切面(Aspect)**:在Spring中,切面通常由一个带有`@Aspect`注解的类表示。这个类可以包含通知方法,这些方法会在指定的连接点执行。 2. **定义通知(Advice)**...
Spring AOP,全称为Aspect Oriented Programming,是Spring框架中的一个重要模块,主要负责处理系统中的...文件"5.SpringAOP_01"和"6.SpringAOP_02"很可能是课程的分阶段内容,涵盖了从基础概念到进阶实践的详细讲解。
5. **运行与测试**:在MyEclipse中,你可以创建一个测试类来调用被AOP代理的`UserService`方法,观察日志记录是否按预期工作。 在压缩包`SpringAOPDemo1`中,很可能包含了整个Spring AOP的示例代码,包括`...
在Spring AOP中,有以下几个核心概念: 1. 切面(Aspect):切面是关注点的模块化,它将相关的通知(Advice)和切入点(Join Point)组合在一起。在Spring AOP中,切面通常由一个或多个注解的类定义。 2. 通知...