前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring相关面试题

spring相关面试题

作者头像
会呼吸的Coder
发布2020-06-19 12:14:50
6720
发布2020-06-19 12:14:50
举报
文章被收录于专栏:会呼吸的Coder

1.使用spring框架的优势是什么?

  • 轻量:spring是轻量级的,基本的版本大约2mb
  • 控制反转:spring通过控制反转实现了松散耦合,对象们给出他们的依赖,而不是创建或查找依赖的对象们
  • 面向切面的编程(AOP):spirng 支持面向切面的编程,并且把应用业务逻辑和系统服务分开
  • 容器:Spring包含并管理应用中对象的声明周期和配置
  • MVC框架:Spring 的web框架是一个精心设计的框架,是web框架的一个很好地替代品
  • 事务管理:spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务
  • 异常处理:Spring提供方便的APi把具体技术相关异常转化为一致的unchecked异常

2.核心容器模块

是基本的Spring模块,提供spring框架的基本功能。BeanFactory是任何以spring为基础的应用的核心。Spring框架建立在此模块之上,它使Spring成为一个容器

3.BeanFactory -BeanFactory实现举例

Bean工厂是工厂模式的一个实现,提供控制反转功能。用来把应用的配置和依赖从真正的代码中分离出来,最常见的beanFactory实现是XmlBeaFactory类

4.谈一谈自己对于Spring IOC和AOP的理解

IOC

IOC是一种设计思想。就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map,Map中存放的是各种对象。

将对象之间的相互依赖关系交由IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像一个工厂一样。当我们需要创建一个对象的时候,只需要配置好配置文件、注解即可,完全不用考虑对象是如何创建出来的。如果要使用IOC的话,只需要配置好,然后在需要的地方引用就可以了,大大增加了项目的可维护性,降低了开发难度

Spring时代我们一般通过XML文件来配置Bean,Spring Boot利用注解配置

AOP

Aop能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理,日志处理,权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可维护性和可扩展性。

Spring Aop是基于动态代理的,如果代理的对象实现了某个接口,那么Spring Aop就会使用JDK动态处理去创建对象;而对于没有实现接口的对象,就无法使用JDK动态代理了,而是用CGlib动态代理生成一个被代理对象的子类来作为代理。

5.Spring中deban作用域有哪些

1.singleton:单例模式,spring中的bean默认都是单例的

2.prototype:每次请求都会创建一个新的bean实例

3.request:每一次http请求都会 产生一个新的bean,该bean仅在当前http request中有效

4.session:每次http请求都会产生一个新的bean,该bean仅在当前http session中有效

5.global-session:全局session作用域,

6.spring中的单例bean的线程安全问题了解吗

单例bean存在线程问题,主要是因为多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。

解决方法有两种

  • 在bean对象中尽量避免定义可变的成员变量
  • 在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal中

7.Spring中的bean声明周期

  1. bean容器找到配置文件中spring bean的定义
  2. bean容器利用java reflection Api创建一个bean的实例
  3. 如果涉及到一些属性值。利用set()方法设置一些属性值
  4. 如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入bean的名字
  5. 如果bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。
  6. 如果bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入classLoader独享的实例。
  7. 如果实现了其他Aware接口,就调用相应的方法
  8. 如果有和加载这个bean的spring容器相关的beanPostProcess对象,执行postProcessBeforeInitialization()方法。
  9. 如果实现了InitalizingBean接口。执行afterPropertiesSet()方法。
  10. 如果bean在配置文件中的定义包含init-method属性,执行指定的方法。
  11. 如果有和加载这个bean的spring容器相关的beanpostProcess对象,执行postProcessAfterInitialization方法。
  12. 当销毁bean的时候。如果bean实现了disposbaleBean接口,执行destory方法,
  13. 当销毁bean的时候,如果bean配置文件中定义了包含destroy-method属性,执行指定的方法。

8.spring mvc的工作原理了解吗

  1. 客户端发送请求,直接请求到DispatcherServlet.
  2. DispatcherServlet根据请求信息调用handlerMapping,解析请求对应的handler。
  3. 解析到对相应的handler(也就是controller控制器)
  4. handlerAdapter会根据handler来调用真正的处理器来调用请求和执行相关的业务逻辑。
  5. 处理器处理完业务后,会返回一个modelAndView对象,moddel是返回的数据对象,view是逻辑上的view
  6. viewResolver会根据逻辑view去查找实际的view。
  7. DispatcherServlet把返回的model传入view
  8. 把view返回给请求者(浏览器)

9.@Component 和Bean的区别是什么。

  1. 作用对象不同,@Component注释作用于类,而@bean注解作用于方法。
  2. @component注解通常是通过类路径扫描来自动侦测以及自动装配到spring容器中。@Bean注解通常在标有改注解的方法中定义产生这个bean没告诉spring这是个某个类的实例。
  3. @bean注解比@component注解的自定义性更强,而且很多地方只能通过@bean注解来注册Bean,比如当引用第三方库的类需要装配到spring容器的时候,就只能通过@bean注解来实现。

10.spring事务实现的方法

  • 编程式事务管理:这意味着你可以通过编程的方法管理事务,这种方法带来了很大的灵活性,但很难维护
  • 声明式事务挂你:这种方法意味着你可以将事务管理和业务代码分离,你只需要通过注解或者xml配置管理事务

11.spring框架的事务管理有哪些优点

  • 他为不同的事务API(如JTA,JDBC等)提供统一的编程模型
  • 他为编程式事务提供了一个简单的APi而非一系列的复杂的事务API
  • 他支持声明式事务管理
  • 他可以和spring的多种数据访问技术很多的融合。

12.beanFactory和ApplicationContext有什么区别

ApplicationContext提供了一种解决文档信息的方法,一种加载文件资源的方式,他可以向监听他们的bean发送消息,另外,容器或者容器中的beans操作,这些必须以bean工厂的编程方式处理的操作可以在应用上下文中以声明的方式处理,应用上下文实现了messageSource,该接口用于获取本地消息,实际的实现是可选的

相同点:两者都是通过xml配置文件加载bean,appllicationcontext相比beanFactory而言,提供了更多的扩展功能。

不同点:beanFactory是延迟加载,如果bean的某一个属性没有注入,beanFactory加载后,直到第一次使用调用getBean方法才会抛出异常,而applicationcontext则在初始化自身的时候检查,这样有助于检查所依赖的属性是否注入,所以通常情况下我们选择使用applicationContext.

13.什么是Spring beans?

Spring Bean是构成Spring应用核心的java对象,这些对象由spring ioc容器实例化,组装,管理。这些对象通过容器中配置的元数据创建,例如,使用xml文件中定义的创建

在spring中创建的beans都是单例的beans,在bean标签中有一个属性为singleton,如果设置为true,该bean是单例的,如果设为false,该bean是原型bean,默认为true

14.spring的单例实现原理

Spring框架对单例的支持是采用单例注册表的方式进行实现的,而这个注册表的缓存是hashmap对象,如果配置文件中的配置信息不要求使用单例,spring会采用新建实例的方式放回对象实例。

15。解释自动装配的各种模式

自动装备提供五种不同的模式供spring容器用来自动装备beans之间的依赖注入:

no:默认的方式是不进行自动装配,通过手动设置ref属性来进行装配bean。

byName:通过参数名自动装配,spring容器查找beans的属性,这些beans在xml配置文件中被设置为byName,之后容器试图匹配。装配和该bean的属性具有相同名字的bean。

byType:通过参数的数据类型自动装配,spring容器查找beans的属性,这些beans在xml配置文件中被设置为ByType,之后容器试图匹配和装配和该bean的属性类型一样的bean如果有多个bean符合条件,则抛出异常

constructor:这个同byType类似,不过是应用于构造函数的参数,如果在beanFactory中不是恰好有一个bean与构造函数相同参数,则抛出一个异常的错误。

autodetect:如果有默认的构造方法,通过construct方法自动装配,否则使用byType的方法自动装配

16. Spring中依赖注入是什么

依赖注入作为控制反转的一个层面,可以有多重解释方式,在这概念中,你不用创建对象而只需要描述如何创建他们,你不必通过代码直接的将组件和服务连接在一起,而是通过配置文件说明那些组件需要什么服务,之后IOC容器负责衔接

17. 有哪些不同类型的IOC

构造器依赖注入

Setter方法依赖注入

最好选择有使用构造器实现强制依赖注入

18. springboot读取读取配置的数据的方法

  • 使用@value注解读取
  • 使用Environment读取
  • 使用@ConfigurationProperties注解读取

19.spring MVC的五大组件

  • 前端控制器
  • 映射处理器
  • 处理器
  • 模型和视图
  • 视图解析器

20.解释什么是自动装配

就是将一个bean注入到其他的ean的property中,默认情况下,容器不会自动装配,需要我们手动设置,spring可以通过Bean Factory中注入的方式来搞定bean之间的依赖关系,达到自动装配的目的

自动装配建议少用,如果要使用,,建议使用byName

21.spring容器中如何创建对象?

  • 无参构造创建
  • 静态工厂创建
  • 实例工厂创建

22.spring有几种配置方式

  • 基于xml文件的配置
  • 基于注解的额配置
  • 组件扫描
  • 在类前面添加的 一些特定的注解
  • 基于java的配置
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 初级程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.核心容器模块
  • 3.BeanFactory -BeanFactory实现举例
  • 4.谈一谈自己对于Spring IOC和AOP的理解
  • 5.Spring中deban作用域有哪些
  • 6.spring中的单例bean的线程安全问题了解吗
  • 7.Spring中的bean声明周期
  • 8.spring mvc的工作原理了解吗
  • 9.@Component 和Bean的区别是什么。
  • 10.spring事务实现的方法
  • 11.spring框架的事务管理有哪些优点
  • 12.beanFactory和ApplicationContext有什么区别
  • 13.什么是Spring beans?
  • 14.spring的单例实现原理
  • 15。解释自动装配的各种模式
  • 16. Spring中依赖注入是什么
  • 17. 有哪些不同类型的IOC
  • 18. springboot读取读取配置的数据的方法
  • 19.spring MVC的五大组件
    • 20.解释什么是自动装配
      • 21.spring容器中如何创建对象?
        • 22.spring有几种配置方式
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档