2021-12-13
1、谈谈你理解的Spring是什么?【难度系数:一颗星】
答:Spring是一个很庞大的生态体系。但是通常说到的Spring指的就是SpringFramework。Spring是一个轻量级的开源容器框架是一个IOC和AOP的容器框架【重点】Spring使用IOC解决了企业级开发的业务逻辑层和其他各层对象的直接耦合问题。AOP:可以对程序进行无缝的,无痕迹的进行增强。容器:创建并管理应用对象的生命周期。
2、Spring的优缺点是什么?【难度系数:两颗星】
优点=Spring的特性
1、IOC
2、AOP
3、声明式事务
4、集成的能力
5、封装了一些功能性的代码:
比如:
访问JDBC,封装了JDBCTemplate
进行rest接口的远程调用,使用RESTTemplate
封装了邮件相关的代码
封装了异步调用的代码
总结:就是简化了开发。
源码层面的优点:
IOC优点:集中管理了对象,使得对象与对象之间的耦合度降低,方便维护对象。比如:之前,需要创建单例对象,需要使用单例设计模式,现在有了IOC之后,使用单例对象,只需要将他配置为一个bean就好了。因为Spring中的bean默认就是单例的。如果需要多例对象,只需要配置scope就行了。如果需要设置bean的软加载的方式,只需要设置lazy-init=true就行。
AOP的优点:在不修改代码的情况下,可以对业务进行增强。减少重复的代码。,提高了开发效率且维护起来也很方便
声明式事务:提高了开发效率。只需要一个简单的注解@Transactional
Spring集成了各种优秀的框架:Spring拥有非常强大的粘合度,集成能力非常强,只需要简单的配置就可以实现集成第三方框架。这个依赖于它底层提供的各种扩展接口。
降低了javaee API的使用难度,封装了很多功能性的代码。我们可以直接学习。
Spring底层大量使用了反射技术,和java设计模式,提供了非常多的扩展接口。
缺点:
简化了开发,但是想深入底层,就非常难。
源码缺点:由于Spring大而全,代码量很庞大,一百多万行,深入学习有点难。
3、什么是SpringIOC容器?有什么作用?优点是什么?【一颗星】
IOC:控制反转。
控制了什么?
之前,创建一个对象都是new来实现,耦合度太高,维护不方便。
引入IOC,就将创建对象的控制权交给了Spring的IOC。以前由程序员自己控制对象的创建,现在交给Spring的IOC去创建。如果程序员需要使用这个对象,就需要通过DI依赖注入的方式,@Autowired自动注入。
优点:集中管理了对象,方便维护。
设置bean的单例和多例都很方便。
设置bean的懒加载模式也只需要写一个配置就好lazy-init=true
降低耦合度。
4、SpringIOC的实现机制是什么?【三颗星】
这里问的是实现机制,不是实现实现原理。
实现机制就是回答实现IOC的一些简单的技术点:
简单工厂的设计模式+反射
工厂:对应BeanFactory的getBean的方法。
反射:利用反射创建bean对象。
5、IOC和DI的区别?【2颗星】
IOC:控制反转。
控制了对象的创建权利。new的形式耦合性很高。
解决耦合度过高,使用IOC的设计思想。
现在创建对象都由Spring来控制对象的创建,由Spring
去维护对象和对象之间的依赖关系。
现在程序员需要对象,就需要去Spring的容器里面拿,需要Spring注入给我才能实现控制反装。
所以:
IOC是一种解决对象之间耦合度过高的设计思想。
DI是实现IOC最重要的一环。
6、紧耦合和松耦合之间的区别?如何编写松耦合的代码?【2颗星】
紧耦合:代码中直接new对象。加重类与类之间的高度耦合。
松耦合:通过设计原则。
面向对象的三大特性和五大原则。其中的五大原则就提供了松耦合的答案。
单一职责,接口分离,依赖倒置的设计原则实现。
单一职责:将不同功能的代码单独写在一个类里面。
接口分离:利用接口编程。
依赖倒置原则:之前,电脑没有鼠标不能启动。现在:电脑没有鼠标照样可以启动。
正转:主板 — 焊接 — 鼠标
反转: 电脑 <----依赖 <---- 鼠标
IOC就实现了依赖倒置原则。