1、AOP是什么、解决了什么问题、应用场景?
AOP是一种设计思想,是面向对象编程的一种补充和完善,称之为面向切面。
在不修改原代码的基础之上,动态(编译时动态、运行时动态)的去扩展我们的业务功能。
编译时动态:编译时自动在我们源代码里面织入一些其他的代码(例如:Lombok)
运行时动态:在我们调用某一个业务对象方法执行一个业务逻辑的时候,想动态织入一些业务功能(例如:权限控制、事务处理)
2、AOP编程基本步骤及实现过程(以基于AspectJ框架实现为例)
1、创建项目后先添加依赖
2、再去写AspectJ框架里面的内容(定义一个切面,切面里定义切入点,再去定义几个通知方法)
3、AOP编程中的核心对象及应用关系
代理对象、切面对象、通知、切入点
4、AOP思想在Spring中的实现原理
基于代理方式进行扩展业务的织入
5、AOP编程中基于注解方式的配置实现
@Aspect, @PointCut, @Around
6、什么是OPC原则(开闭原则)
是一种设计原则,对扩展开放、对修改关闭。一旦一个业务写好以后不要总是在那个业务对象里面再去添加其他的业务(要么在编译时在字节码里面去织入一些新的业务,要么在运行时通过代理的方式进行扩展)
7、什么是DIP原则(依赖倒置)
类与类之间可能会有一定的耦合(耦合与具体、耦合与抽象),我们一般叫做耦合与抽象。而耦合叫做依赖,那么依赖于抽象而不是具体这种过程我们一般叫做依赖倒置,不是依赖于具体的实现类,而是依赖于它的接口或抽象。
8、什么是单一职责原则(SRP)
一个类的职责不要太多,就类似于一个方法不要什么都做。如果要做其他的事情,我们把每一块业务独立出来,然后以面向切面编程的方式切入进去。
9、Spring中AOP是如何为Bean对象创建代理对象的
JDK:目标对象实现了接口,使用该代理的时候目标对象必须有实现的接口
CGLIB:目标对象没有实现接口,没有实现接口也可以,使用该代理的时候目标对象类型不能使用final修饰
10、多个事务并发执行时可能会出现什么问题
脏读、不可重复读、幻读