Spring 初级面试题整理

1、Spring的IOC容器

​ IOC的概念:控制反转,把对象的创建过程与使用统一交给springbean管理

​ IOC主要实现技术:反射、解析xml、bean工厂

​ 优点:降低了代码耦合度,提高了程序的可维护性

2、什么是AOP

​ 面向切面编程,将与业务逻辑无关的,且又通用的代码封装起来。便于减少代码冗余,提高程序的维护性

3、AOP包含的几个概念

​ 1、Jointpoint(连接点):具体的切面点

​ 2、Advice(通知): 在连接点进行的具体操作,分为前置、后置、异常、最终、环绕五种情况。

​ 3、目标对象:被AOP框架进行增强处理的对象,也被称为被增强的对象。

​ 4、AOP代理:AOP框架创建的对象,简单的说,代理就是对目标对象的加强

4、Spring的主要组成部分

  • spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。
  • spring beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
  • spring context:构建于 core 封装包基础上的 context 封装包,提供了一种框架式的对象访问方法。
  • spring jdbc:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析, 用于简化JDBC。
  • spring aop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等。
  • spring Web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。
  • spring test:主要为测试提供支持的,支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。

5、DI注入的三种方式:

​ 1、构造器注入 2、set注入 3、接口注入(已被spring弃用)

6、Spring常用注解

@Component, @Controller, @Repository, @Service

@Autowired和@Resource之间的区别

  • @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。
  • @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。

7、Springmvc的执行流程

​ 1)用户发送请求至前端控制器DispatcherServlet

​ 2)DispatcherServlet收到请求调用HandlerMapping映射器

​ 3)HandlerMapping找到具体的处理器,生成对象及拦截器返给DispatcherServlet

​ 4)DispatcherServlet调用HandleAdapter适配器

​ 5)HandleAdapter经过适配调用具体的Controller

​ 6)Controller执行完成返回ModelAndView

​ 7)适配器将执行结果返回给DispatcherServlet

​ 8)DispatcherServlet再将结果传给ViweReslover视图解析器

​ 9)ViweReslover解析后返回具体的View

​ 10)DispatcherServlet根据View渲染视图

​ 11)完成响应

​ 请求-----前端控制器----映射器----适配器----controller----modelAndView----适配器----

​ 前端控制器----视图解析器----视图----渲染----响应

8、什么是Springboot

​ 开箱即用的框架,减少配置代码,

​ 所有的配置写在yml文件中,在main方法中通过@springbootApplication启动项目

​ @SpringBootConfiguration:它组合了 @Configuration 注解,实现配置文件的功能。
​ @EnableAutoConfiguration:具有打开自动配置的功能,也可以关闭某个自动配置的选项。
​ @ComponentScan:用于Spring组件扫描。

9、Springboot启动流程

1、@SpringBootApplication注解

​ @SpringBootConfiguration:标注当前类是配置类,启动时会将这个类中声明的Bean注入到Spring容器中
​ @EnableAutoConfiguration:开启自动配置,也springboot的核心注解
​ @ComponentScan:扫描所在类的package,加载符合条件的组件(类中含有@Component等相关bean注解)

2、run()方法

​ 1、创建定时器stopWatch并启动 2、获取并运行listeners 3、打印banner

​ 4、创建上下文ApplicationContext 5、预处理上下文 6、刷新上下文(添加后置处理器)

​ 7、listeners发布finish 8、定时器stopWatch停止计时 9、打印启动日志

10、spring、springmvc、springboot的区别

​ Spring是一个ioc容器,用来管理bean,使用依赖注入实现控制反转,方便整合各种框架提供的AOP,可以将业务重复代码抽成切面,自动注入给方法执行,比如日志等操作;

​ Springmvc是spring对web框架的一个解决方案,提供了前端控制器servlet,handler处理器,用来接受请求和响应数据

​ Springboot是spring提供的快速开发工具包,简化了配置,采用注解化方式启动项目

11、Spring中bean的创建过程?SpringBean的生命周期

简单来说:主要分四个阶段:实例化 -》属性赋值 -》初始化 -》销毁

​ 1、解析类得到BeanDefinition

​ 2、如果有多个构造方法,则要推断构造方法

​ 3、确定好构造方法,进行实例化得到一个对象

​ 4、对象中加了@Autowrired注解的属性进行属性值填充

​ 5、回调Aware方法,例如:BeanNameAware,BeanFactoryAware

​ 6、调用BeanPostProcessor初始化前的方法

​ 7、调用初始化方法

​ 8、调用BeanPostProcessor初始化后的方法,会使用到AOP

​ 9、如是使用的是单列Bean,会把bean放入单例池中

​ 10、使用bean

​ 11、Spring容器关闭时,调用DisposableBean的destory()方法

12、SpringBean是线程安全的吗?不安全的解决方案

​ springBean默认作用域是sington,是线程不安全的

​ spring的作用域:

​ 1、sington 2、prototype:为每个Bean请求创建实例

​ 3、request:为每个request请求创建一个实例

​ 4、session 5、global-session:全局作用域

线程安全问题:

​ prototype:每次都生成一个新的对象,不存在线程安全问题

​ sington:对于大部分bean都是无状态的,不需要保证线程安全,所以在MVC开发中不存在线程安全问题

​ 无状态:表示这个实例没有属性值,不存在线程可见性问题,比如:controller,service,dao

​ 有状态:可以存数据,有变量值存在,比如:pojo

解决方案:

​ 1、可以将bean的作用域改为prototype

​ 2、使用ThreadLocal,为每个线程存一个副本变量,每个线程只操作自己的副本变量

13、Spring用到了哪些设计模式?

​ 1、单例模式:springbean 2、工厂模式:beanFactory

​ 3、适配器模式:HandlerAdater 4、代理模式:AOP

​ 5、策略模式:访问Resources下的Mapper接口

14、Spring事务什么时候会失效?

​ 1、bean不受Spring容器管理

​ 2、方法修饰符不是public

​ 3、自身调用问题,只有被代理方法去调用其它方法,事务才能失效。普通方法,调用代理方法,事务不会生效(方法上有@Transactional属于被代理方法)

​ 4、rollbackFor指定的异常和抛出的异常不同

源码级别(待深入理解):

​ SpringBoot自动配置原理

​ SpringMVC底层执行流程

​ Spring事务的传播机制

​ Bean的创建过程底层实现

​ SpringIOC的启动流程及底层实现

​ Spring如何处理循环依赖问题

​ AOP的底层实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值