达内云笔记(二) AOP面向切面编程

xiaoxiao2021-02-28  32

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()的返回值

切入点表达式: 1.类级别  - within(包名) 2.对象级别  - bean(userService)  - bean(userService) || bean(noteService)  - bean(*Service) 3.方法级别  - execution(* cn.tedu.note.service.UserService.login(..)) 参数用".."表示  Sun公司建议将包名,方法名和类名定制的有规律,便于使用切入点。 AOP的工作原理: 1.注解如何解析:利用反射解析注解 2.Spring AOP是利用AspectJ实现 3.AOP底层利用了动态代理技术   - 如果被代理的位置有接口,则使用JDK动态代理   - 如果被代理的位置没有借口,则使用CGLIB动态代理   **建议AOP切入到有接口的位置,自动调用JDK动态代理 4.JDK动态代理是反射API的一部分   - java.lang.reflect.Proxy

5.代理模式: 不改变原有类功能,为类的方法扩展功能

转载请注明原文地址: https://www.6miu.com/read-600276.html

最新回复(0)