发表于: 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统计方法执行时间有点想法,大概就是写一个类,切需要的方法,开始和结束,最后减出时间。
评论