Spring AOP应用

Spring 框架的一个关键组件是面向方面的编程(AOP)框架。面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点。跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样的常见的很好的方面的例子,如日志记录、审计、声明式事务、安全性和缓存等。
AOP 采取横向抽取机制,取代了传统纵向继承体系的重复性代码,其应用主要体现在事务处理、日志管 理、权限控制、异常处理等方面。Spring AOP 模块提供拦截器来拦截一个应用程序,例如,当执行一个方法时,你可以在方法执行之前或之后添加额外的功能:
名称 描述
Aspect 一个模块具有一组提供横切需求的 APIs。例如,一个日志模块为了记录日志将被 AOP 方面调用。应用程序可以拥有任意数量的方面,这取决于需求。
Join point 在你的应用程序中它代表一个点,你可以在插件 AOP 方面。你也能说,它是在实际的应用程序中,其中一个操作将使用 Spring AOP 框架。
Advice 这是实际行动之前或之后执行的方法。这是在程序执行期间通过 Spring AOP 框架实际被调用的代码。
Pointcut 这是一组一个或多个连接点,通知应该被执行。你可以使用表达式或模式指定切入点正如我们将在 AOP 的例子中看到的。
Introduction 引用允许你添加新方法或属性到现有的类中。
Target object 被一个或者多个方面所通知的对象,这个对象永远是一个被代理对象。也称为被通知对象。
Weaving Weaving 把方面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。这些可以在编译时,类加载时和运行时完成。
使用 aop 命名空间标签,需要导入 spring-aop架构,需要在的应用程序的 CLASSPATH 中使用以下 AspectJ 库文件。这些库文件在一个 AspectJ 装置的 ‘lib’ 目录中是可用的, 声明一个 aspect一个 aspect 是使用 元素声明的,支持的 bean 是使用 ref 属性引用,将被配置和依赖注入,可以使用 <aop:{ADVICE NAME}> 元素在一个 中声明五个建议中的任何一个可以对不同的建议使用相同的 doRequiredTask 或者不同的方法。这些方法将会作为 aspect
模块的一部分来定义。
aop:config
<aop:aspect id=“myAspect” ref=“aBean”>
<aop:pointcut id=“businessService”
expression=“execution(* com.gx.op….(…))”/>
<aop:before pointcut-ref=“businessService” method=“doRequiredTask”/>
<aop:after pointcut-ref=“businessService” method=“doRequiredTask”/>
<aop:after-returning pointcut-ref=“businessService”
returning="retVal"method=“doRequiredTask”/>
<aop:after-throwing pointcut-ref=“businessService”
throwing=“ex” method=“doRequiredTask”/>
<aop:around pointcut-ref=“businessService”
method=“doRequiredTask”/></aop:aspect>
</aop:config>
创建一个名项目,并且在所创建项目的 src 文件夹下创建一个名为 com.tutorialspoint 的包。使用 Add External JARs 选项添加所需的 Spring 库文件,就如在 Spring Hello World Example 章节中解释的那样。在项目中添加 Spring AOP 指定的库文件 aspectjrt.jar,aspectjweaver.jar 和 aspectj.jar。在 com.tutorialspoint 包下创建 Jav类 Logging, Student 和 MainApp。在 src 文件夹下创建 Beans 配置文件 Beans.xml。最后一步是创建所有 Java 文件和 Bean 配置文件的内容,并且按如下解释的那样运行应用程序。
aspect 模块的一个示例:
public void beforeAdvice(){
System.out.println(“Going to setup student profile.”);}
public void afterAdvice(){
System.out.println(“Student profile has been setup.”);}
一旦已经完成的创建了源文件和 bean 配置文件,运行一下应用程序。如果你的应用程序一切都正常的话,将会输出您想要的结果!
@AspectJ 作为通过注释注释的普通的 Java 类,它指的是声明 aspects 的一种风格。通过在你的基于架构的 XML 配置文件aop:aspectj-autoproxy/,@AspectJ 支持是可用的。
你还需要在你的应用程序的 CLASSPATH 中使用以下 AspectJ 库文件。这些库文件在一个 AspectJ 装置的 ‘lib’ 目录中是可用,Aspects 类和其他任何正常的 bean 一样,除了它们将会用 @AspectJ 注释之外,它和其他类一样可能有方法和字段,将在 XML 中按照如下进行配置,就和其他任何 bean 一样,一个切入点有助于确定使用不同建议执行的感兴趣的连接点(即方法)。在处理基于配置的 XML 架构时,切入点的声明有两个部分:一个切入点表达式决定了我们感兴趣的哪个方法会真正被执行。一个切入点标签包含一个名称和任意数量的参数。方法的真正内容是不相干的,并且实际上它应该是空的。
通过 JoinPoint 参数可以获得目标对象的类名、目标方法名和目标方法参数等。 需要注意 的是,环绕通知必须接收一个类型为 ProceedingJoinPoint 的参数,返回值必须是 Object 类型, 且必须抛出异常。异常通 知中可以传入 Throwable类型的参数,用于输出异常信息。
定义了一个切入点标签方法//切面类 @Aspect
public class MyAopAspect1 {
@Before()
public void doBeforeTask(){ }
@After(“businessService()”)
public void doAfterThrowingTask(Exception ex){ }}
使用 Add External JARs 选项添加所需的 Spring 库文件,在项目中添加 Spring AOP 指定的库文件,在 src 文件夹下创建 Beans 配置文件 Beans.xml。,最后一步是创建所有 Java 文件和 Bean 配置文件的内容,这样就可以运行应用程序。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值