1、什么是OOP?
面向对象编程,世间万物都可以看做一个对象,主要特点是抽象、封装、继承、多态;
2、OOP的好处?
(1)代码开发模块化,易于维护;
(2)代码复用性强;
(3)增加代码的可靠性以及灵活性;
3、OOP的四大特性?
抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。抽象模型一般包含属性和行为,需求不同模型不同;
封装:使类具有隔离性,保证类的高内聚、低耦合(内聚:模块内的交互程度,耦合:指的是模块间的交互程度),依赖类的修 饰符(public、protected、default、private)
继承(继承和接口实现):对现有的类的一种复用机制;如果一个类继承了现有的类,则这个类将拥有被继承类的所有非私有特性;
多态:多态是在集成的基础上实现的,多态的三要素,继承、重写、父类的引用指向子类的对象;多态分为运行时多态和编译时多条;
如果在编译时能够知道执行的具体的方法,就是编译时多态,否则就是运行时多态;
ps:重载是编译时多态,重写是运行时多态;
4、什么是AOP?(https://blog.youkuaiyun.com/yuexianchang/article/details/77018603)
与OOP的关系:OOP的补充和完善;OOP引入抽象、封装、继承、多态等特性来建立一种对象层次结构,但是当我们需要为其分散的对象引入公共的行为时,OOP则无能为力,例如日志功能,如果仅仅使用OOP的设计,会导致大量大码的重复;
AOP的原理:利用横切的技术,剖解开封装对象的内部,并将那些影响了多个类的公共的行为封装起来
ps:AOP是针对于与业务处理的主要流程没多大关系的横切关注点,其经常发生在核心关注点(与主要的业务流程有关的);例如权限认证、日志、事务管理;
5、如何实现AOP?
(1)使用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有的对象行为的执行;
(2)采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码;
6、AOP的相关概念?
切面:存放共有功能的一个普通的java类,在配置中指定为切面;切面用Spring的Advisor或拦截器实现;
连接点:程序运行过程中能够插入切面的点;
通知:切面的具体实现;以目标方法为参照点,包括环绕、前置、后置;
切入点:定义通知应该切入到哪些连接点上;
引入:添加方法或者字段到被通知的类;
目标对象:包含连接点的对象;
AOP代理:AOP框架创建的对象,包含通知,代理可以是JDK动态代理,也可以是CGLIB代理;
织入:创建一个被通知的对象,在运行时完成织入(织入分为,编译时织入、运行时织入、类加载时织入)