AOP 是什么?有哪些作用?

参考答案

AOP 的概念

  • AOP 的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程);
  • 是函数式编程的一种衍生泛型,隶属于软工范畴,指导开发者如何组织程序结构;
  • 是面向对象编程(OOP)的一种补充;
  • 是Spring框架中的一个重要内容。

AOP 的作用

  • 在不修改目标类代码的前提下,去增强目标类的功能,通过 预编译方式运行期动态代理实现程序功能的统一维护;
  • 可以对业务代码中的业务逻辑系统逻辑进行隔离,从而使得业务逻辑和系统逻辑直接的耦合度降低,提高程序的可重用性以及开发效率

应用场景

  有一段业务代码,老板让你统计一下每天使用功能A的人数。于是,我们在A的代码后面加上了一段代码,实现了统计每天的使用人数;

  过了一周,老板说为了提高系统运行效率,需要看一下功能A每次的执行时间。于是,我们在A的代码前后加上了新的代码,实现记录功能A执行时间的功能;

  又过了一周,老板说咱们这个系统万一出错了,得记录下日志。于是,我们又在功能A的代码后面加上了一段实现日志功能的代码;

  .......

  时间久了,功能 A 的内部代码变得臃肿无比,充斥着大量和功能 A 的业务无关的代码。并且,新加的功能,可能不仅是功能 A 需要,或许功能 B、功能 C、功能 D....都需要。如果不想出一个优雅的解决方案,就要对功能 B、功能 C、功能 D....一个个进行方法注入,工作量巨大、代码冗余。代码写得再规范,再怎么优化,这些代码也已经破坏了OOP特性之一的封装性,造成了代码污染。

  这时候,我们可以运用 AOP 的思想,把和主干业务无关的功能代码给抽取出来,然后在这些功能运行时将其动态的横向插入进去,减少耦合度和代码冗余。

小结

  • OOP 只能实现父子关系的纵向的重用。使用传统的 OOP 通过组合或者继承的方式,可以达到代码的重用,但要实现某个功能(如日志记录),同样的代码会分散到各个方法中。如要关闭或修改某个功能,必须要修改所有的相关方法,开发工作量和代码出错率都会增加。
  • AOP 通过代理模式,将自己要处理的事务横切入系统中,实现了面向切面的编程。不破原始代码的封装性,将分散在各个方法中的重复代码提取出来,对已有的代码进行扩展,从而实现更为丰富的功能。

  • 实现 AOP 的核心技术是反射。

以上,是Java面试题【AOP 是什么?有哪些作用?】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

👇阅读作者更多技术干货👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧