AspectJ实现AOP

一、 AspectJ简介

1、AspectJ是一个基于Java语言的AOP框架
2、Spring2.0以后新增了对AspectJ切点表达式支持
3、@AspectJ 是AspectJ1.5新增功能,通过JDK5注解技术, 允许直接在Bean类中定义切面
4、新版本Spring框架,建议使用AspectJ方式来开发AOP
5、主要用途:自定义开发

二、 切入点表达式【掌握】

execution()
用于描述方法 【掌握】
语法:execution(修饰符 返回值 包.类.方法名(参数) throws异常)

修饰符,一般省略
	public		公共方法
	*			任意
返回值,不能省略
	void			返回没有值
	String		返回值字符串
	* 			任意
包,[省略]
	com.gyf.crm			固定包
	com.gyf.crm.*.service	crm包下面子包任意 (例如:com.gyf.crm.staff.service)
	com.gyf.crm..			crm包下面的所有子包(含自己)
	com.gyf.crm.*.service..	crm包下面任意子包,固定目录service,service目录任意包
类,[省略]
	UserServiceImpl			指定类
	*Impl					以Impl结尾
	User*					以User开头
	*						任意
方法名,不能省略
	addUser					固定方法
	add*						以add开头
	*Do						以Do结尾
	*						任意
(参数)
	()						无参
	(int)						一个整型
	(int ,int)					两个
	(..)						参数任意
throws ,可省略,一般不写。

案例1execution(* com.gyf.crm.*.service..*.*(..))

案例2:或
<aop:pointcut expression="execution(* com.gyf.crm.service.*.*(..)) || 
                          execution(* com.gyf.*Do.*(..))" id="myPointCut"/>
**within**:
匹配包或子包中的方法(了解)
within(com.gyf.aop..*)

this:
匹配实现接口的代理对象中的方法(了解)
this(com.gyf.aop.user.UserDAO)

target:
匹配实现接口的目标对象中的方法(了解)
target(com.gyf.aop.user.UserDAO)

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

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

三、 AspectJ 通知类型

aop联盟定义通知类型,具有特性接口,必须实现,从而确定方法名称。
aspectj 通知类型,只定义类型名称,以及方法格式。
个数:6种,知道5种,掌握1中。
	before:前置通知(应用:各种校验)
		在方法执行前执行,如果通知抛出异常,阻止方法运行
	afterReturning:后置通知(应用:常规数据处理)
		方法正常返回后执行,如果方法中抛出异常,通知无法执行
		必须在方法执行后才执行,所以可以获得方法的返回值。
	around:环绕通知(应用:十分强大,可以做任何事情)
		方法执行前后分别执行,可以阻止方法的执行
		必须手动执行目标方法
	afterThrowing:抛出异常通知(应用:包装异常信息)
		方法抛出异常后执行,如果方法没有抛出异常,无法执行
	after:最终通知(应用:清理现场)
		方法执行完毕后执行,无论方法中是否出现异常

AspectJ实现AOP_第1张图片
AspectJ实现AOP_第2张图片

4 Aspect案例讲解【其于xml】

第一步:导包
AOP联盟规范:aopalliance-1.0.0
AOP实现:spring-aop-3.2.0
规范:aspectj.weaver-1.6
aspectj实现:spring-aspects-3.2.0
AspectJ实现AOP_第3张图片
第二步:实现类和切面类
AspectJ实现AOP_第4张图片
AspectJ实现AOP_第5张图片

第三步:spring的xml配置

AspectJ实现AOP_第6张图片

第四步:测试

AspectJ实现AOP_第7张图片

你可能感兴趣的:(Spring)