目录
前言
java最新面试题(java基础、集合、多线程、jvm、锁、算法、CAS、Redis、数据库、mybatis、spring、springMVC、springBoot、微服务)
一.IOC(Inversion of Control)
1.IOC是什么?
控制反转,将创建对象进行反转,因为正常都是程序员去创建对象,现在使用spring容器去创建,根据需求自动去创建对象。
对象实例化,通过spring容器进行创建和管理,spring通过DI(数据注入)实现IOC。
2.IOC的实现原理
实现原理是工厂模式加反射机制。
二.AOP(Aspect Oriented Programming)
1.AOP是什么?
AOP也是以IOC为基础,面向切面编程,抽象化的面向对象,面向对象的补充和完善。面向对象就是把事务的特性和行为抽象为一个对象,比如:people类都有身高、年龄、体重等属性,也有吃饭、睡觉等行为。这些属性和行为封装成一个类。面向切面就像people类有自己的属性和行为,但是有一小部分人要去篮球场练习两年半,不是所有人都需要去练习篮球。那么AOP就把练习篮球的业务逻辑抽离出来,然后动态切入方法中,减少代码重复和解耦。简单来说:做到核心业务和非核心业务的耦合。
什么叫切面呢,下面我用图来解释一下,把多个方法都要做的操作,抽取出来。
2.AOP的实现原理
AOP的实现原理是JDK动态代理, 代理模式是指给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理对象提供与真实对象相同的接口,以便代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作。
注意: 也可以使用CGLIB代理,基于类,JDK动态代理,基于接口。
3.说一下AOP都有哪些基本理念?或者是AOP的术语
- 目标对象(target)
需要被代理的类。 - 连接点(JoinPoint)
程序执行的某一个点,比如某个方法。 - Aspect(切面)
通常是一个类,里面定义Pointcut(切入点)和 Advice(通知)。 - Pointcut(切入点)
用来指定需要将Advice(通知)使用到哪些地方。 - Advice(通知)
所要增强或增加的功能。 - weave(织入)
把切面应用到目标对象并创建新的代理对象的过程. - introduction(引入)
在不修改代码的前提下,引入可以在运行期为类动态地增加一些方法或字段。
4.Advice(通知)的类型有哪些
①前置通知(Before Advice): 在目标方法执行之前执行。
②后置通知(After Advice): 在目标方法执行之后执行 。
③环绕通知(Around): 在目标方法调用前后均可执行自定义逻辑。
④返回通知(After returning advice): 在目标方法返回结果之后执行。
⑤异常通知(After throwing advice): 异常通知, 在方法抛出异常之后。
5.AOP的应用场景
(1) 日志记录
(2) 事务
(3) 权限管理
(4) 缓存
(5) 懒加载
(6) 内容传递
(7) 错误处理
(8) 调试
(9) 性能优化
(10) 持久化
(11) 资源池
(12) 同步
(13) 记录跟踪 优化 校准