浅谈spring aop的实现原理和实现过程

时间:2022-07-26
本文章向大家介绍浅谈spring aop的实现原理和实现过程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.通俗的理解 (职责拆分,高聚合)

AOPAspect Oriented Programming,面向切面编程,AOP呢是通过分离应用的业务逻辑与系统级服务代码,达到职责拆分,功能提取,即高内聚的一个目的,应用对象只关注它们应该做的,即业务逻辑,而非业务相关的代码,如记录日志或事物支持等,脱离主业务代码,抽离成一个单独的切面类,从而在代码运行时动态地嵌入到我们的代码中,以实现编写时代码拆分,代码高内聚,运行时代码整合,功能保证齐全的目的。

实例: 在一个业务系统中,用户登录是一个基础功能,凡是涉及到用户的业务流程都要求登录,如果把登录功能代码写入到每一个业务流程中,就会显得代码的冗余,维护的时候也是很麻烦的。最好的办法就是吧代码抽离出来,形成独立的模块(拦截器),当业务流程需要的时候,系统会把登录功能自动切入到业务中,这就是一个AOP的体现 。

2.AOP的概念

AOPspring提供的关键特性之一。AOP即是面向切面编程,是OOP编程的有效补充。使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,然后通过切面进入系统,从而避免在业务逻辑代码的中混入很多的系统相关的逻辑–比如权限控制、事务管理、日志记录等等。这些系统的编程工作可以通过独立的代码实现,然后通过AOP技术切入系统既可以。从而到达了讲不同的关注点分类出来的效果。

  • Join point(接入点)
  • Advice (通知)
  • PointCut(切入点)
  • Aspect(切面)
  • Target Object(目标对象)
  • AOP proxy (AOP代理)
  • weaving (织入):是将切面应用到目前对象的过程,这个过程可以是在编译时

3.AOP的实现原理

AOP分为静态AOP和动态AOP。静态AOP指的是Aspect实现的AOP,他是将切面代码直接编译到java类文件中。动态AOP是将切面代码进行动态织入实现的AOPspringAOP为动态AOP,实现的技术为:JDK提供的动态代理结束和CGLIB(动态字节码增强技术)。尽管实现的技术不一样,但都是基于动态代理模式。都是生成一个代理对象。

4.AOP的实际目的

就是在开发的工程中 专一开发就行 最后交由spring进行代码增强

5.什么是代理

代理是一种设计模式,提供了简介对目标对象进行访问的方式,即通过代理对象访问目标对象,这样的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能。

这就符合了设计模式的开闭原则,即在对既有的代码不改动的情况下进行功能的扩展。

6. JDK代理和CGLIB代理原理、区别

如果目标对象为接口使用JDK代理 否则使用CGLIB代理