AOP 面向切面编程,也称为横截面编程,其实类似于Filter和拦截器。Filter和拦截器也是横截面编程,即类似切了一刀,然后搞完一端再搞另一端。
而Filter 和 拦截器 是用于处理Web请求的“横截面拦截”编程,在云笔记和项目中有登录,html,*.do,业务层和持久层。Filter和拦截器用于拦截html和*.do的切面。AOP用于业务层的编程。
AOP的优点:
在不改变原有业务情况下,为软件灵活扩展功能。即在保留目前功能的情况下再加其他功能,不改变原有代码。在多个业务层控制器中,难免有公用的功能。而AOP提供了动态调用业务方法。在控制器和业务层放入切入点,当切入点触发事件时,调用容器中的切面bean。
导入jar包:
org.aspectj
aspectjweaver
1.8.0
org.aspectj
aspectjtools
1.8.0
org.aspectj
aspectjrt
1.8.0
配置:
通知(切入点表达式):
@Aspect 标注在类之上 声明切面
@Before("bean(xxxxx)") 标注在方法之上 声明通知和切入点 “bean(xxx)“为切入点,即为在xxx的全部方法之前执行方法
@AfterReturing 在切入点正常执行完成后执行,如果切入点抛出异常,则不执行
@AfterThrowing 在切入点抛出异常后执行
@After 类似final 不管是否有抛出异常都在最后执行
@Around 类似Servelt Filter 既可以在方法前又可以在方法后 使用该通知需要传入参数"ProceedingJoinPoint",类似chain.do,ProceedingJoinPint(jp)也有一核心方法proceed(),即调用目标的业务方法(利用反射实现invoke()),适用于性能测试(时间),配合jp.signature()来获取方法名。不写try catch,返回.proceed()的返回值
5.代理模式: 不改变原有类功能,为类的方法扩展功能