发表于: 2017-08-24 20:14:30

1 954


今天完成的事情:用笔记的形式写的日报,也方便日后参考。

AOP4.1.2-4.3

Spring对AOP的四种支持:

1,基于代理的经典Spring AOP;

2,纯POJO切面;

3,@AspectJ注解驱动的切面;

4,注入式AspectJ切面(适用于Spring各版本)。

Spring AOP构建在动态代理基础上,Spring对AOP的支持局限于方法拦截。

Spring的经典AOP编程模型笨重复杂,使用简单的声明式AOP和基于注解的AOP。

声明式:Spring的aop命名空间可以将纯POJO转换为切面,需要XML配置。

注解式:Spring借鉴AspectJ的切面,提供注解驱动的AOP,不使用XML配置。

如果AOP需求超过了简单的方法调用(如构造器或属性拦截),第四种类型能够将值注入到AspectJ驱动的切面中。


Spring的通知是用标准Java类编写的,定义切点通常用注释或XML配置。

Spring在运行时通知对象

Spring只支持方法级别的连接点


Spring借助AspectJ的切点表达式语言来定义Spring切面,编写AspectJ切点,Spring只支持AspectJ切点指示器的一个子集。

arg() 限制连接点匹配参数为指定类型的执行方法

@args() 限制连接点匹配参数由指定注解标注的执行方法

execution() 用于匹配是连接点的执行方法

this() 限制连接点匹配AOP代理的bean引用为指定类型的类

target 限制连接点匹配目标对象为指定类型的类

@target()限制连接点匹配特定的执行对象,这些对象对应的类要具有指定类型的注解

within() 限制连接点匹配指定的类型

@within()限制连接点匹配指定注解所标注的类型(当使用Spring AOP时,方法定义在由指定的注解所标注的类里)

@annotation 限定匹配带有指定注解的连接点

主要使用execution执行匹配。

在Spring中使用AspectJ其他指示器会抛出异常。

定义一个接口作为主题定义切面的切点

package concert;

public interface Performance{ public void perform(); }

选择该方法:

限制仅匹配concert包:


操作符:与'&&';或'丨丨';非'!'。XML里分别用and,or,not代替。

Spring引入了新指示器bean(),可以限制ID或名称。


使用注解创建切面

@AspectJ注解表明该类不仅是POJO还是一个切面,类中方法都用注解定义切面的具体行为。

@After 通知方法会在目标方法返回或抛出异常后调用

@AfterReturning 通知方法会在目标方法返回后调用

@AfterThrowing 通知方法会在目标方法抛出异常后调用

@Around 通知方法会将目标方法封装起来

@Before 通知方法会在目标方法调用之前执行

还可使用@Pointcut注解声明切点表达式,例

@Pointcut(切点表达式)

public void performance(){}

可用performance()代替切点表达式。


将@Aspect注解的bean类转换为切面的代理:


使用最强大的通知类型“环绕通知”实现相同切面:

处理通知中的参数







明天计划的事情:

书上第四章讲AOP大概还剩三分之一,明天回学校,不知道有没有时间学,希望是能搞定。


遇到的问题:

我看书实在太没动力,搞完这部分把代码完善好继续进行任务吧。现在还是习惯拿书当参考,啃书太乏了。


收获:

对用AOP统计方法执行时间有点想法,大概就是写一个类,切需要的方法,开始和结束,最后减出时间。


返回列表 返回列表
评论

    分享到