Appearance
1.介绍一下Spring的IOC
- IOC即控制反转,它可以解耦对象之间的依赖关系;
- 比如B类使用A类,原来控制权在B,B只要new一个A即可使用;
- 现在控制权在A本身,只有当A注入容器B才能获取到。
2.介绍一下Spring的AOP
AOP即面向切面编程,将公共逻辑抽离出来,配合注解可以实现日志记录、权限控制;
3.为什么Spring不建议使用基于字段的依赖注入?
- IDEA使用
@Autowired
会弹出警告,推荐使用构造器方式注入; - 当业务代码越来越复杂,导致注入的对象越来越多,类逐渐开始违反单一职责原则,使用构造器相当于变相体型你引入的类太多了,已经违反单一职责原则,建议重构。
- 如果在类的构造方法使用注入的对象,可能bean尚未初始化,使用构造器可以减少这个问题
4.Spring Bean的初始化过程是怎么样的?
- 设置属性值:
5.Spring支持哪些注入方式?
- 注解
@Autowired
和@Resource
- 构造器
- setting
6.谈谈你对循环依赖的理解
- 概念:一般是A和B互相依赖,或A->B->C三个互相注入,如果是使用构造器注入方式,没法解决这个问题,会在程序启动时检测,如果有循环依赖直接抛出异常,
- 解决:只能通过Set设置值的方式注入,相当于延缓在其中一个构造器中加入@Lazy,延迟初始,或拆分服务
7.聊聊Spring中的作用域
- 使用
@Scope
可以设置bean的作用域, - singleton:单例模式,一个bean只有一个实例。
- prototype:原型模式,每次获取bean时,都会重新创建一个实例。
- request:请求域,每次请求都会创建一个bean实例。
- session:会话域,每个会话都会创建一个bean实例。
- global:全局域,每个线程都会创建一个bean实例。
- application:应用域,每个应用都会创建一个bean实例。
- websocket:在每个 WebSocket 会话中创建一个 Bean 实例