什么AOP?面向切面编程(Aspect Oriented Programming)
OOP-- 面向对象编程(Object Oriented Programming)
AOP和OOP一样都是一个编程思想,OOP主要功能封装、继承、多态,AOP它是将系统分解为不同的关注点(不同的切面)。
OOP,我们会根据业务将应用划分为多个不同的业务模块,每个模块的核心功能只为某个核心业务提供服务,如学生宿舍管理系统,学生管理、班级管理、房间管理,分别学生、班级、房间服务的。
除此之外,还会有一些非业务的通用功能,如日志、权限、事务管理等。它们和业务无关,但是几乎所有的模块都会用到它。因此这些通用功能会散布在不同的业务模块中。此时会有很多重复性的代码,不理模块的复用。
为了解决这个问题,AOP(面向切面编程)就出来了,它是把非业务的通用功能抽取出来单独维护,并通过声明的方式(定义切入点)去指定这些功能以何种方式(通知类型)作用在哪里(方法连接点--目标方法),而不是直接在模块的代码中去直接添加。
AOP和OOP的目的是一致的,都是为了减少程序中的重复性代码,让开发者把精力集中于业务逻辑,只是它们的实现方式不同。OOP(婉约派),使用继承和组成方式,为通用功能提高代码复用。AOP(豪放派),通过切入点规定,在某包某类某方法中,去添加同样操作。
AOP不是用来替换OOP的,而是OOP的延伸,用来解决OOP中遇到的问题。
AOP术语
切面:由通知和切入点组成
连接点:应用程序执行过程中插入切面的地点,一般多为方法
通知:切面中非核心业务通用功能的具体实现代码
切入点:定义通知应该在应用程序的什么位置(连接点)
目标对象:被通知的对象
代理:将通知应用到目标对象后创建的对象
织入:将切面应用到目标对象从而创建一个新的代理对象的过程
AOP的关键就在于能够创建切入点,定义切面中的通知在那些连接点织入。