Spring AOP框架 AspectJ

1 AspectJ简介

v  AspectJ是一个基于Java语言的AOP框架

v  Spring2.0以后新增了对AspectJ切点表达式支持

v  @AspectJ 是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面

新版本Spring框架,建议使用AspectJ方式来开发AOP

主要用途:自定义开发

2 切入点表达式【掌握】

execution()

用于描述方法 【掌握】


语法:execution(修饰符  返回值  包.类.方法名(参数) throws异常)

修饰符,一般省略

public                公共方法

*                        任意

返回值,不能省略

void                   返回没有值

String                返回值字符串

*                       任意

包,[省略]

com.zz.crm                     固定包

com.zz.crm.*.service   crm包下面子包任意 (例如:com.gyf.crm.staff.service)

com.zz.crm..                  crm包下面的所有子包(含自己)

com.zz.crm.*.service.. crm包下面任意子包,固定目录service,service目录任意包

类,[省略]

UserServiceImpl                       指定类

*Impl                                          以Impl结尾

User*                                          以User开头

*                                                  任意

方法名,不能省略

addUser                                     固定方法

add*                                                    以add开头

*Do                                             以Do结尾

*                                                  任意

(参数)

()                                                  无参

(int)                                             一个整型

(int ,int)                                      两个

(..)                                                参数任意

throws ,可省略,一般不写

案例1

execution(* com.zz.crm.*.service..*.*(..))

 

案例2:或

<aop:pointcut expression="execution(* com.zz.crm.service.*.*(..)) ||

                          execution(* com.gyf.*Do.*(..))" id="myPointCut"/>

within:

匹配包或子包中的方法(了解)


within(com.zz.aop..*)

this:

匹配实现接口的代理对象中的方法(了解)


this(com.gyf.aop.user.UserDAO)

target:

匹配实现接口的目标对象中的方法(了解)


target(com.gyf.aop.user.UserDAO)

args:

匹配参数格式符合标准的方法(了解)


args(int,int)

bean(id)

对指定的bean所有的方法(了解)


bean(‘userServiceId‘)

3 AspectJ 通知类型

   before:前置通知(应用:各种校验)

在方法执行前执行,如果通知抛出异常,阻止方法运行

afterReturning:后置通知(应用:常规数据处理)

方法正常返回后执行,如果方法中抛出异常,通知无法执行

必须在方法执行后才执行,所以可以获得方法的返回值。

around:环绕通知(应用:十分强大,可以做任何事情)

方法执行前后分别执行,可以阻止方法的执行

必须手动执行目标方法

afterThrowing:抛出异常通知(应用:包装异常信息)

方法抛出异常后执行,如果方法没有抛出异常,无法执行

after:最终通知(应用:清理现场)

方法执行完毕后执行,无论方法中是否出现异常

原文地址:https://www.cnblogs.com/orangezhangzz/p/11745854.html

时间: 2024-10-26 12:53:25

Spring AOP框架 AspectJ的相关文章

比较分析 Spring AOP 和 AspectJ 之间的差别

面向方面的编程(AOP) 是一种编程范式,旨在通过允许横切关注点的分离,提高模块化.AOP提供方面来将跨越对象关注点模块化.虽然现在可以获得许多AOP框架,但在这里我们要区分的只有两个流行的框架:Spring AOP和AspectJ.这里将会帮助你基于一些关键信息,为你的项目选择正确的技术. Spring AOP不同于大多数其他AOP框架.Spring AOP的目的并不是为了提供最完整的AOP实现(虽然Spring AOP具有相当的能力):而是为了要帮助解决企业应用中的常见问题,提供一个AOP实

Spring AOP With AspectJ

一.AOP和拦截器 某些情况下,AOP和拦截器包括Filter能够实现同样的功能,一般都是请求即controller层的操作,这三个执行顺序为Filter>Interceptor>AOP,当然这里面的区别我会重新写一篇文章讲解,这里面提一下就是想告诉大家,不一定要使用AOP,个人感觉用Filter和Interceptor实现的更方便简单一点. 二.AOP 准备 在spring框架下,你还需要添加aspectjrt,aspectjweaver和cglib 的相关jar包,maven项目的pom.

Spring/AOP框架, 以及使用注解

1, 使用代理增加日志, 也是基于最原始的办法 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class LoggingProxy { /* * 代理类, 基于接口 */ //要被代理的对象, 目标对象 private Icalculator target; //生成一个构造方法 public LoggingPr

专门的aop框架-AspectJ

在前面的spring的aop的使用的基础上:切面类只能写一个方法,只能增强一个功能.就需要创建多个切面对象,配置多个<aop:advisor> AspectJ的注解式开发步骤 定义一个普通的类,添加@Aspect注解,表明是一个切面类 定义要增强的方法,通过注解确定增强的类型 @Before:前置通知 @AfterReturning:后置通知 @Around:环绕通知 @AfterThrowing:异常通知 @After:最终通知(相当于java中的finally) 通过aspectj的exe

Spring AOP和AspectJ支持

学了Spring之后发现我都不知道java为何物-- 在这一章中有好几节,讲的切面编程 第一节:在项目中启用Spring的AspectJ注解支持 第二节:用AspectJ注解声明aspect 第三节:访问连接点信息 第四节:指定aspect的优先级 第五节:重用切入点定义 第六节:编写AspectJ切入点表达式 第七节:在Bean中引入行为 第八节:为Bean引入状态 第九节:用基于XML的配置声明aspect 如果JVM版本低于1.4时后者不想依赖于AspectJ,就不应该使用AspectJ来

spring AOP 编程--AspectJ注解方式 (4)

1. AOP 简介 AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充. AOP 的主要编程对象是切面(aspect), 而切面模块化横切关注点. 在应用 AOP 编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能在哪里, 以什么方式应用, 并且不必修改受影响的类. 这样一来横切关注点就被模块化到特殊的对象(切面)里. AOP 的好处:

spring aop ---基于AspectJ

因为自己在引用jar包上吃过很多亏,也浪费过很多时间,所以每次都会把使用到的jar包都标明,谢谢理解! 引用jar包: 1.运行类: @Service public class Fit { public String say(){ System.out.println("册数使用的数据!!!!"); // throw new RuntimeException("失败!!!"); return "你好啊!!!"; } } 2.切面类:该类需@Com

关于 Spring AOP (AspectJ) 你该知晓的一切

[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/54629058 出自[zejian的博客] 关联文章: 关于Spring IOC (DI-依赖注入)你需要知道的一切 关于 Spring AOP (AspectJ) 你该知晓的一切 本篇是年后第一篇博文,由于博主用了不少时间在构思这篇博文,加上最近比较忙,所以这篇文件写得比较久,也分了不同的时间段在写,已尽最大能力去连贯博文中的内容

Spring AOP AspectJ 代码实例

本文参考来源 http://examples.javacodegeeks.com/enterprise-java/spring/aop/spring-aop-aspectj-example/http://oss.org.cn/ossdocs/framework/spring/zh-cn/aop.html 概念 面向方面编程 (AOP) 提供从另一个角度来考虑程序结构以完善面向对象编程(OOP). 面向对象将应用程序分解成 各个层次的对象,而AOP将程序分解成各个方面 或者说 关注点 . 这使得可