Spring篇 高频面试 二

Spring框架能给我带来哪些好处

  1. 简化开发
  2. Spring提供了很多内置的解决方案,比如BOP编程思想、IoC、AOP编程思想
  3. 声明式事务管理,TransactionManager管理事务
  4. 提供了很多工具类、围绕Spring生态来实现的,比如JDBCTemplate

谈谈你对SpringBean的理解

        在Spring中,构成应用程序主干并由Spring IoC容器管理的对象成为Bean。Bean是由一个Spring IoC容器实例化、组装和管理的对象。

Spring Bean的定义包含哪些内容

class - 类名

scope 作用域-单例|多例

lazy-init 延迟加载

depends-on 依赖的对象

name|id 定义的名字或者id

constructor-arg 初始化方法

properties

init-method 初始化时会调用的方法

destroy-method 销毁时会调用的方法

项目中如何使用AOP

        声明式事务管理、日志兼容、权限管理、安全监控、限流。

BeanFactory和ApplicationContext有什么区别

  1. ApplicationContext是BeanFactory的实现类。
  2. BeanFactory是顶层设计,而ApplicationContext是User Interface。
  3. ApplicationContext功能方法非常多,API最全的,一般会被开发者任务ApplicationContext就是IoC。
  4. 实际上IoC的功能是在DefaultListableBeanFactory类中完成的,有共同的接口BeanFactory。

请解释Spring Bean的生命周期

        简单来说,所谓生命周期就是从创建、到调用、到销毁的一个过程。

        如果是单例对象,那么生命周期也就是Spring容器的启动到Spring容器销毁的过程。如果是延时加载的单例对象,那么就会在调用前创建对象。

        如果是多例对象,在调用前创建、调用后销毁。它的作用域决定了生命周期的长短。

Spring Bean各作用域之间的区别

  1. 单例对象作用域是全局的,在任何地方都可以通过IoC容器拿到它。
  2. 多例对象的作用域也是全局的。
  3. request的作用域是在一次请求发起和结束之间。
  4. session的作用域在一个session创建和session失效之间,一般默认是30分钟,可以修改
  5. global-session可以理解为容器中的一个应用。spring5后移除了

为什么Spring中的每个Bean都要定义作用域。

        在我们使用Spring Bean的时候,有些对象是全局唯一的、有的对象只在一次请求中唯一、有些对象是在一次会话中唯一、有些对象每次使用都是新的对象,这些都是因为需求而设计的。

        比如request作用域范围是每次发起请求直至拿到响应结果,是从WebApplicationContext整个作用域范围内取的。

        session作用域范围是浏览器首次访问至浏览器关闭是从ApplicationContext取的。

Spring中的bean是线程安全的么。

        坑题。Spring中的bean是否线程安全和Spring无关的,和开发者写的代码有关,想他线程安全那就线程安全,想不安全那就不安全。

Spring中用到了哪些设计模式

        23种设计模式基本都用了,列举一下吧

  1. 工厂模式(BeanFactory)

  2. 单例模式(容器式单例 AbstractBeanFactory类、Map)、

  3. 原型模式(容器式多例 AbstractBeanFactory)、

  4. 代理模式、(ProxyFactoryBean)

  5. 策略模式(Resource)

  6. 享元模式、

  7. 门面模式、(JdbcUtils、Request)

  8. 适配器模式、Aop里的(AdvisorAdapter)

  9. 委派模式、(DefaultBeanDefinitionDocumentReader)

  10. 装饰器模式、(TransactionAwareCacheDecorator)

  11. 责任链模式

  12. 建造者模式(BeanDefinitionBuilder)

  13. 解释器模式(ExpressionParser)

  14. 观察者模式(ContextLoaderListener)

 Spring、SpringBoot、Spring Cloud到底有什么区别

  1. Spring是已有的生态、本身Spring就已经能够完成日常开发的所有功能了。
  2. SpringBoot是在Spring的基础上,再次封装,目的是为了简化开发,因为Spring的配置文件很多,管理起来很麻烦。Spring Boot里面内置了很多默认的配置、我们需要覆盖的时候才需要配置。
  3. Spring Boot还提供了一套脚手架、一键搭建、节省空间。
  4. SpringCloud正式进军分布式、比如注册中心、服务发现、监控-链路追踪、配置中心、负载、熔断、来打造一个新的生态。
  5. Spring Cloud依赖Spring Boot、SpringBoot依赖Spring。

 Spring事务是怎么传播的。        

        Spring事务的传播是由TransactionManager控制的,TransactionManager是一个代理的类。

        TransactionManager的execute()方法会拿到一个DataSource,通过DataSource可以拿到Connection。利用AOP的原理、在Before()方法执行前,先将AutoCommit设置为false,再将After()里面方法执行后,通过判断条件、判断事务是回滚还是提交。执行完之后,再将连接关闭。

 Spring MVC

说下Spring MVC的执行流程

  1. 用户先发送请求到前端控制器DispatcherServlet

  2. 前端控制器收到请求后调用处理器映射器HanderMapping。

  3. 处理器映射器根据请求url找到具体的处理器,生成处理器执行链并返回给前端控制器

  4. 前端控制器根据处理器返回的信息获取适配器执行一系列操作,如参数封装、数据格式转换、数据验证等。

  5. 处理器适配器会调用并执行后端控制器Controller。

  6. 等控制器执行完成后返回ModelAndView给处理器适配器

  7. 处理器适配器将ModelAndView对象返回给前端控制器

  8. 前端控制器将ModelAndView传给ViewReslover视图解析器

  9. 视图解析器返回具体的视图View,前端控制器就对视图进行渲染

  10. 最后响应给用户

Spring boot

 Spring boot的核心注解是哪个?由哪些注解组成

        启动类上面的注解是@SpringBootApplication,是SpringBoot的核心注解,SpringBootApplication里面包含

  1. @SpringBootConfiguration内部其实就是@Configuration注解,实现配置文件的功能,相当于一个beans.xml文件。
  2. @EnableAutoConfiguration:打开自动配置的功能,将所有符合自动配置条件的bean定义加载到Ioc容器。
  3. @ComponentScan自动扫描并加载符合条件的组件或bean定义,最终将这些bean定义加载到容器中。

springBoot 的自动装配原理是什么

主要是Spring Boot的启动类上的核心注解SpringBootApplication注解配置类,有了这个配置类启动时就会为SpringBoot开启一个@EnableAutoConfiguration注解自动配置功能

@EnableAutoConfiguration就会

  1. 从配置文件的META-INF/Spring.factories文件里 加载可能用到的自动配置类。并将其中对应的配置类通过反射进行一个实例化,然后汇总并加载到IOC容器里

  2. 当然这些配置类要加入到IOC容器里也是需要条件的

    1. spring.factories里面有这个类的配置类

    2. pom.xml必须有对应的jar包

你如何理解Spring Boot配置文件加载顺序

  1. properties文件

  2. yaml文件

  3. 系统环境变量

  4. 命令行参数

如果springBoot想使用xml配置,要如何做

         springboot推荐使用注解来配置,但是也可以使用xml配置,通过@ImportResource注解可以引入一个xml配置。   

SpringBoot的启动过程是怎么样的

SpringBoot的启动主要是 通过实例化SpringApplication来启动 的。其中主要做了几件事情。推断WebApplicationType,在classPath里搜索特定的类。在Sprint.factories文件配置里查询需要字段配置类以及ApplicationListener的实现类。详细过程主要是在run方法中

  1. 创建定时器stopWatch并启动。

  2. 获取并允许listeners。

  3. 打印banner。

  4. 创建上下文ApplicationContext,判断是否需要启动tomcat。

  5. 预处理上下文,刷新上下文,添加后置处理器。

  6. 再刷新上下文,给后置处理器排序。

  7. 监听器发布完成。

  8. 定时器stopWatch停止计时。

  9. 打印启动日志。

     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值