【面试准备】Spring 框架面试题
2. Spring 的优缺点?
优点:
低侵入式设计
独立于各种应用服务器
依赖注入的特性将组件关系透明化,降低了耦合性
面向切面的特性允许将通用任务进行集中化处理
与第三方框架良好整合
缺点:
Spring 基于大量的 xml 配置文件,使得我们花了大量的时间放在配置上,拖慢了开发的进度,SpringBoot 问世后,提倡代码优于配置解决了这个问题。
3. Spring 的 IOC 和 AOP
1)IoC(Inversion of control): 控制反转
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系。
核心:bean 工厂;在 Spring 中,bean 工厂创建的各个实例称作 bean
2)AOP(Aspect-Oriented Programming): 面向切面编程
概念:AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。
代理的两种方式:
静态代理:
针对每个具体类分别编写代理类。
针对一个接口编写一个代理类。
动态代理:
针对一个切面编写一个 InvocationHandler,然后借用 JDK 反射包中的 Proxy 类为各种接口动态生成相应的代理类。
4. Spring 的 IOC 三种注入方式
setter
interface
constructor
5. Spring 的 7 个模块
![title](https://raw.githubusercontent.com/AY-Format
/images/master/gitnote/2019/03/31/Spring%E7%9A%847%E4%B8%AA%E6%A8%A1%E5%9D%97-1554010353453.jpg)
Spring Core:核心类库,提供 IOC 服务。
Spring Context:提供框架式的 Bean 访问方式,以及企业级功能(JNDI、定时任务等)。
Spring AOP:AOP 服务。
Spring DAO:对 JDBC 的抽象,简化了数据访问异常的处理。
Spring ORM:对现有的 ORM 框架的支持。
Spring Web:提供了基本的面向 Web 的综合特性,例如多方文件上传。
Spring MVC:提供面向 Web 应用的 Model-View-Controller 实现。
6. Spring 是什么?
Spring 是一个轻量级的 IOC 和 AOP 的容器框架。
7. BeanFactory 和 ApplicationContext 有什么区别?
①BeanFactroy 采用的是延迟加载形式来注入 Bean 的,即只有在使用到某个 Bean 时(调用 getBean()),才对该 Bean 进行加载实例化。
②ApplicationContext,它是在容器启动时,一次性创建了所有的 Bean。
③相对于基本的 BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置 Bean 较多时,程序启动较慢。
8. 解释 Spring 支持的几种 bean 的作用域
Spring 容器中的 bean 可以分为 5 个范围:
(1)singleton:默认,每个容器中只有一个 bean 的实例,单例的模式由 BeanFactory 自身来维护。
(2)prototype:为每一个 bean 请求提供一个实例。
(3)request:为每一个网络请求创建一个实例,在请求完成以后,bean 会失效并被垃圾回收器回收。
(4)session:与 request 范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后,bean 会随之失效。
(5)global-session:全局作用域,global-session 和 Portlet 应用相关。当你的应用部署在 Portlet 容器中工作时,它包含很多 portlet。如果你想要声明让所有的 portlet 共用全局的存储变量的话,那么这全局变量需要存储在 global-session 中。全局作用域与 Servlet 中的 session 作用域效果相同。
9. Spring 的自动装配
在 Spring 框架 xml 配置中共有 5 种自动装配:
(1)no:默认的方式是不进行自动装配的,通过手工设置 ref 属性来进行装配 bean。
(2)byName:通过 bean 的名称进行自动装配,如果一个 bean 的 property 与另一 bean 的 name 相同,就进行自动装配。
(3)byType:通过参数的数据类型进行自动装配。
(4)constructor:利用构造函数进行装配,并且构造函数的参数通过 byType 进行装配。
(5)autodetect:自动探测,如果有构造方法,通过 construct 的方式自动装配,否则使用 byType 的方式自动装配。
基于注解的方式:
使用 @Autowired 注解来自动装配指定的 bean。
10. @Autowired 和 @Resource 之间的区别
(1) @Autowired 默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它 required 属性为 false)。
(2) @Resource 默认是按照名称来装配注入的,只有当找不到与名称匹配的 bean 才会按照类型来装配注入。
11. Spring 框架中都用到了哪些设计模式?
1)工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实例;
(2)单例模式:Bean 默认为单例模式。
(3)代理模式:Spring 的 AOP 功能用到了 JDK 的动态代理和 CGLIB 字节码生成技术;
(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
(5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如 Spring 中 listener 的实现–ApplicationListener。
12. spring 的事务传播行为
① PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
② PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘
③ PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
④ PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
评论