- 对线面试官day2-Spring基础
- 1.熟悉Spring基础
- 2.Spring的IOC和AOP你是怎么理解的?
- 3.Spring IOC有什么好处呢? 本来我可以new出来的对象,为什么要交给Spring IOC容器来管理呢?
- 4.Spring AOP聊一下?
- 5.工作中实际用到AOP去优化你的代码吗?
- 6.你们项目一般是怎么把对象交给lOC容器管理的?一般是怎么定义Bean的?
- 7.使用Spring的感受?
SpringIOC解决的是对象管理和依赖管理的问题,本来我们自己手动new一个对象出来,现在交给SpringIOC容器来管理,IOC容器可以理解成一个对象工厂,我们把对象交给工厂,工厂来管理对对象的创建和依赖关系,到我们需要对象的时候,直接从工厂中获取就好。
控制反转和依赖注入?
控制反转:把原来自己掌控的事情交给别人去处理,更多的是一种思想或设计模式
例如:本来我们自己new出来的对象,现在由IOC容器,把对象的控制权交给和它方。
依赖注入呢,是控制反转的实现方式
对象无需自行创建或者无需管理他的依赖关系,依赖关系被自动注入到需要他们的对象中去
3.Spring IOC有什么好处呢? 本来我可以new出来的对象,为什么要交给Spring IOC容器来管理呢?主要好处在于将对象统一管理并降低耦合度。
工厂模式SpringIOC可以方便单元测试,对象创建复杂,对象依赖复杂,单例等等,什么都可以交给Spring IOC 。
理论上自己new出来的都可以解决上面的问题,Spring在各种场景组合下有可能不是最优解,但是new出来的你要自己管理,可能你得自己写工厂,得实现一大套东西才能满足需求,写着写着有可能还是Spring的那一套。但是Spring现在已经帮你实现了。
并且Spring核心不仅仅IOC,除了把对象创建出来还有一整套Bean生命周期管理
4.Spring AOP聊一下?Spring AOP解决的是非业务代码抽取问题
AOP底层的技术是动态代理,在Spring中实现依赖的是BeanPostProcessor
比如我们需要在方法上注入些重复性的非业务代码,就可以利用SpringAOP
面向切面编程理解为是在方法前后增加非业务代码
5.工作中实际用到AOP去优化你的代码吗?有的。当时我用AOP来对我们公司现有的监控客户端进行封装,一个系统离不开监控,监控基本指标有QPS、RT、ERROR等等。
对外暴露的监控客户端只能在代码里写对应的上报信息,于是利用注解+AOP的方式封装了一把,只要方法/类上带有我自定义注解
方法被调用时,就会上报AQS、RT等信息实现了非业务代码与业务代码分离的效果。
6.你们项目一般是怎么把对象交给lOC容器管理的?一般是怎么定义Bean的?Spring提供了4种方式,分别是:
1):注解2):XML 3):JavaConfig 4):基于Groovy DSL配置
一般项目我们用注解或XML比较多,少部分用JavaConfig
日常写业务代码一般用注解来定义各种对象,责任链这种一般配置在XML ,「注解」解决不了的就用JavaConfig
总体而言,还是得看项目的代码风格吧
反正就是定义元数据,能给到Spring解析就好了
当我还是初学Spring的时候,我觉得Spring很麻烦,需要有一大堆的配置信息才能跑起来光是搭建环境就需要耗费我好长的时间毕竟版本冲突,依赖冲突什么的就可能一个下午就过去了,但毕竟一个系统环境只搭一次嘛,所以还好



