最近想给我的框架加一种功能,就是比如给一个方法加一个事务的特性Attribute,那这个方法就会启用事务处理。给一个方法加一个缓存特性,那这个方法就会进行缓存。这个也是网上说的面向切面编程AOP。AOP的概念也很好理解,跟中间件差不多,说白了,就是我可以任意地在方法的前面或后面添加代码,这很适合用于缓存、日志等处理。在netcore2.2时,我当时就尝试过用autofac实现aop,但这次我不想用autofac,我用了一个更轻量级的框架...
继续阅读 >
分类:AOP
2020
12-02
12-02
Spring Boot 结合 aop 实现读写分离
前言入职新公司到现在也有一个月了,完成了手头的工作,前几天终于有时间研究下公司旧项目的代码。在研究代码的过程中,发现项目里用到了SpringAop来实现数据库的读写分离,本着自己爱学习(我自己都不信…)的性格,决定写个实例工程来实现springaop读写分离的效果。环境部署数据库:MySql库数量:2个,一主一从关于mysql的主从环境部署,可以参考:https://www.jb51.net/article/184698.htm开始项目首先,毫无疑问,先开始搭建一...
继续阅读 >
2020
11-25
11-25
Spring Aop如何给Advice传递参数
给Advice传递参数Advice除了可以接收JoinPoint(非AroundAdvice)或ProceedingJoinPoint(AroundAdvice)参数外,还可以直接接收与切入点方法执行有关的对象,比如切入点方法参数、切入点目标对象(target)、切入点代理对象(this)等。1获取切入点方法参数假设我们现在有一个id为userService的bean中定义了一个findById(intid)方法,我们希望定义一个Advice来拦截这个方法,并且把findById()的参数作为Advice处理方法的参数,...
继续阅读 >
2020
11-10
11-10
Spring如何基于aop实现操作日志功能
1.在pom中添加所需依赖创建一个springboot工程,添加所需要的依赖,持久化用的是mybatis<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--springbootaop依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!--mybatis--><dependency>...
继续阅读 >
2020
10-30
10-30
Spring AOP 与代理的概念与使用
一、AOP的基本概念1.1什么是AOPAspectOrientedProgramming,面向切面编程。就跟我们说OOP是面向对象一样,AOP是面向切面的。切面是分散在应用中的一个标准代码或功能。切面通常与实际的业务逻辑不同(例如,事务管理)。每个切面专注于一个特定的环切功能。这里的切面呢,可以理解为横切。比如在所有的DAO层方法上加上一个同样的切面,功能是记录日志;又或者在某个接口上应用一个切面,作用是检查权限。AOP是基于代理...
继续阅读 >
2020
10-28
10-28
Spring基于advisor配置aop过程解析
1、目标类packagecom.gec.target;publicclassHadoop{publicvoideatting(){System.out.println("大象正在吃东西1");try{//耗时5秒Thread.sleep(5000);}catch(InterruptedExceptione){e.printStackTrace();}}}2、增强类,此类必须要实现增强方位接口packagecom.gec.advice;importorg.springframework.aop.MethodBeforeAdvice;importjava.lang.reflect.Method;publi...
继续阅读 >
2020
10-24
10-24
Spring注解配置AOP导致通知执行顺序紊乱解决方案
今天在测试Spring的AOP时,发现使用注解配置AOP的方式会导致通知的执行顺序紊乱。【最终通知居然在异常通知之前执行了】测试代码(1)定义TargetInterface目标接口publicinterfaceTargetInterface{publicabstractvoidtargetProxy();}(2)定义TargetImpl目标类@Component("target")publicclassTargetImplimplementsTargetInterface{publicvoidtargetProxy(){System.out.println("targetproxy......");inti=1/0;/...
继续阅读 >
2020
10-10
10-10
Spring AOP面向切面编程实现及配置详解
动态代理特点字节码随用随创建,随用随加载作用不用修改源码对方法增强分类基于接口的动态代理基于子类的动态代理创建使用Proxy类中的newProxyInstance方法要求被代理类最少实现一个接口,没有则不能使用newProxyInstance方法参数classLoader:类加载器用于加载代理对象字节码的,和被代理对象使用相同的类加载器class[]:字节码数组用于让代理对象和被代理对象有相同方法,固定写法。InvocationHandler:用于提供增强的代码是让...
继续阅读 >
2020
10-10
10-10
Spring AspectJ AOP框架注解原理解析
什么是AspectJAspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。AspectJ是一个基于Java语言的AOP框架Spring2.0以后新增了对AspectJ切点表达式支持@AspectJ是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面新版本Spring框架,建议使用AspectJ方式来开发AOPAspectJ表达式:语法:execution(表达式)execution(<访问修饰...
继续阅读 >
2020
10-10
10-10
Spring AOP实现权限检查的功能
前言最近开发了一个接口,完成后准备自测时,却被拦截器拦截了,提示:(AUTH-NO)未能获得有效的请求参数!怎么会这样呢?于是我全局搜了这个提示语,结果发现它被出现在一个Aspect类当中了,并且把一个@interface作为了一个切点,原来这里利用了SpringAOP面向切面的方式进行权限控制。正文SpringAOP即面向切面,是对OOP面向对象的一种延伸。AOP机制可以让开发者把业务流程中的通用功能抽取出来,单独编写功能代码。在业务流程...
继续阅读 >
2020
10-09
10-09
Java核心库实现简单的AOP
Spring是一个十分火热开源框架,而AOP(面向切面编程)则是Spring最重要的概念之一,为了更好的理解和学习AOP的思想,使用核心库来实现一次不失为一个好方法。首先介绍一下AOP的概念,AOP(AspectOrientedProgramming),即面向切面编程,所谓的面向切面编程,就是从一个横切面的角度去设计代码的思想,传统的OOP思想是用封装继承和多态构造一种纵向的层次关系,但不适合定义横向的关系,而AOP思想则对此进行了很好的补...
继续阅读 >
2020
10-09
10-09
Spring AOP面向切面编程实现原理方法详解
1.什么是AOPAOP(AspectOrientedProgramming)意为:面向切面编程,通过预编译方式和运行期动态代理实现在不修改源代码的情况下,给程序动态统一添加功能的一种技术,可以理解成动态代理。是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,使业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发的效率2.SpringAOP①.AOP在Spring中的作用提供声明式事务;允许用户自定义切面②.AOP...
继续阅读 >
2020
10-08
10-08
Spring AOP里的静态代理和动态代理用法详解
什么是代理?为某一个对象创建一个代理对象,程序不直接用原本的对象,而是由创建的代理对象来控制原对象,通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间什么是静态代理?由程序创建或特定工具自动生成源代码,在程序运行前,代理类的.class文件就已经存在通过将目标类与代理类实现同一个接口,让代理类持有真实类对象,然后在代理...
继续阅读 >
2020
10-08
10-08
如何通过XML方式配置AOP过程解析
第一步:把通知类用bean标签配置起来<beanid="txManager"class="com.atguigu.account.utils.TransactionManager"><!--注入ConnectionUtils--><propertyname="connectionUtils"ref="connectionUtils"/></bean>第二步:使用aop:config声明aop配置aop:config:作用:用于声明开始aop的配置<aop:config></aop:config>第三步:在使用aop:config标签里面配置aop:aspect切面aop:aspect:作用:用于配置切面。属...
继续阅读 >
2020
10-08
10-08
Spring AOP注解案例及基本原理详解
切面:Aspect切面=切入点+通知。在老的spring版本中通常用xml配置,现在通常是一个类带上@Aspect注解。切面负责将横切逻辑(通知)编织到指定的连接点中。目标对象:Target将要被增强的对象。连接点:JoinPoint可以被拦截到的程序执行点,在spring中就是类中的方法。切入点:PointCut需要执行拦截的方法,也就是具体实施了横切逻辑的方法。切入点的规则在spring中通过AspectJpointcutexpressionlanguage来描述。切入点与连接...
继续阅读 >
2020
10-08
10-08
Spring boot AOP通过XML配置文件声明的方法
通过XML配置文件声明在前两篇博文和示例中,我们已经展示了如何通过注解配置去声明切面,下面我们看看如何在XML文件中声明切面。下面先列出XML中声明AOP的常用元素:AOP配置元素用途aop:advisor定义AOP通知器aop:after定义AOP后置通知(不管被通知的方法是否执行成功)aop:after-returning定义AOP返回通知aop:after-thr...
继续阅读 >