北京网站建设一般多少钱,西安大雁塔简介,网站的建设怎么弄,中企动力做的电梯网站什么是AOP AOP是面向切面#xff0c;面向切面编程#xff0c;是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。对多个对象共同行为封装成一个模块叫切面,然后某个方法为切点。 通俗的讲#xff1a;就是在一些代码中做重复操作的时候#xff0c;我们为了…什么是AOP AOP是面向切面面向切面编程是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。对多个对象共同行为封装成一个模块叫切面,然后某个方法为切点。 通俗的讲就是在一些代码中做重复操作的时候我们为了实现代码的复用性统一去处理这些工作让后让我们得操作自然的嵌入(用自定义注解)到指定方法的指定位置。 利用AOP可以对业务逻辑 的各个部分进行隔离从而使得业务逻辑各部分之间的耦合度降低提高程序的可重用性同时提高 了开发的效率。
如下图所示 把水平面抽象成一个切面对象我们把日志代码放到切面对象中然后对这个切面对象去编程本质上还是面向对象编程但是思想是面向切面编程。 通过aop可以对其进行增强减少重复代码降低耦合。基于代理实现。
5个关键术语
1横切关注点从每个方法中抽取出来的同一类非核心业务
2切面Aspect对横切关注点进行封装的类每个关注点体现为一个通知方法通常使用 Aspect 注解来定义切面。
3通知Advice切面必须要完成的各个具体工作比如我们的日志切面需要记录接口调用前后的时长就需要在调用接口前后记录时间再取差值。通知的方式有五种 Before通知方法会在目标方法调用之前执行 After通知方法会在目标方法调用后执行 AfterReturning通知方法会在目标方法返回后执行 AfterThrowing通知方法会在目标方法抛出异常后执行 Around把整个目标方法包裹起来在被调用前和调用之后分别执行通知方法
4连接点JoinPoint通知应用的时机比如接口方法被调用时就是日志切面的连接点。
5切点Pointcut通知功能被应用的范围比如本篇日志切面的应用范围是所有 controller 的接口。通常使用 Pointcut 注解来定义切点表达式。
项目中使用过AOP吗AOP使用场景
我的项目里面日志操作用过。
用户请求的时候我们需要记录下这些操作例如需要记录操作的用户是谁、请求方式是什么、访问地址、模块名称、登录IP、操作时间等。就用到了这个AOP。具体如何操作看下面如何使用AOP。
常用的使用场景 记录操作日志 缓存处理 Spring中内置的事务 如何使用AOP
例如日志操作日志操作的核心是使用aop中的环绕通知切点表达式找到要记录日志的方法通过环绕通知的参数获取请求方法的参数保存到数据库。
日志用来记录一下请求的方式解析方法可以获取、URL、用户名解析Session可以获取、操作时间等。 1. 在项目中导入AOP就是导入到xml文件中 2. 在切面类上加一个注解Aspect表明这是切面类。例如日志操作那你的切面类里面就需要写一些业务获取操作时间、操作人的用户名可以用Session或token获取、访问的URL、请求方式等然后将这些记录到数据库。 3. 自定义一个注解用来标注你要做的公共代码。 有的代码需要记录日志有的不需要那就用这个注解来表示哪些需要做日志。 AOP核心动态代理 将程序中的业务逻辑加到目标类上就会涉及到动态代理AOP的核心技术是动态代理体现动态代理核心mybatis的dao层其实就是使用到了jdk动态代理只有接口需要通过CGlib生成实现类作为模板类给代理使用Spring通过代理引入模板类生成代理类对象invoke调用对象的Method方法传入目标类对象和参数完成动态代理
Spring AOP和 AspectJ AOP有什么区别? springAOP 是spring支持的面向切面AOP 编程。 AspectJ是一个面向切面的框架它扩展了Java语言。AspectJ定义了AOP语法它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
springAOP 不是一个完备的AOP 方案。
AspectJ是最首创的AOP技术用来提供全面的AOP方案。
Spring AOP属于运行时增强而Aspect是编译时增强。Spring AOP 基于代理(Proxying)而AspectJ基于字节码操作(Bytecode Manipulation)。 Spring AOP已经集成了Aspectl, Aspectl应该算的上是Java生态系统中最完整的 AOP框架了。Aspectl相比于Spring AOP功能更加强大但是 Spring AOP相对来说更简单 如果我们的切面比较少那么两者性能差异不大。但是当切面太多的话最好选择Aspectl它比Spring A0P.快很多。 同级调用方法不可切入