AOP是Spring非常重要的内容,而且Java面试经常问AOP原理,下面我就来详解AOP原理@mikechen
AOP定义
AOP,英文全称是Aspect Oriented Programming,翻译过来就是面向切面编程,AOP是一种编程思想和技术。
AOP作用
在AOP中我们通过定义:横切关注点和切面来实现对系统的功能进行增强或修改,而不是直接修改原有代码。
通过将横向的、通用的关注点,比如:如日志、事务、权限、性能统计等从纵向的业务逻辑中抽离出来。
如下图所示:
通过这种切面的方式,AOP实现了各个模块的分离,提高了系统的可重用性、可维护性和可扩展性。
AOP原理
AOP实现的关键在于“切面”,它可以定义在程序中的任意一个位置,并且可以在不改变原有程序逻辑的情况下对程序进行扩展。
AOP实现的主要技术有两种:静态代理和动态代理。
1.静态代理
静态代理是指在程序编译期间就已经确定了代理对象,代理对象与被代理对象的关系在编译期间就已经确定,因此也称为编译时织入。
2.动态代理
动态代理是指在程序运行时,通过反射机制动态生成代理对象,代理对象与被代理对象的关系在运行时确定,因此也称为运行时织入。
Spring AOP采用的是动态代理的方式实现切面,Spring AOP中的切面是基于AspectJ实现。
在Spring AOP中,切面由切点(Pointcut)和通知(Advice)组成,切点是指在程序中需要织入切面逻辑的位置,通知是切面逻辑的具体实现。
在Spring AOP中,通过配置切面(Aspect)和连接点(Join Point),来实现在特定位置、特定时间,织入特定的代码逻辑,其中,切面是被通知的对象,连接点是被通知的位置。
根据通知的不同,Spring AOP主要分为以下五种类型:
1.前置通知(Before Advice):在目标方法执行前执行;
2.后置通知(After Advice):在目标方法执行后执行,不管是否抛出异常;
3.返回通知(After Returning Advice):在目标方法返回后执行;
4.异常通知(After Throwing Advice):在目标方法抛出异常后执行;
5.环绕通知(Around Advice):在目标方法执行前和执行后都可以执行。
以上就是AOP原理详解,更多AOP内容请查看:Spring AOP全面详解
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》