Spring面试题
文章平均质量分 54
似来
一个老程序员
展开
-
大厂面试题-Spring中的Bean是线程安全的吗
Spring作为最热门的框架,在很多大厂面试中都会问到相关的问题。前几天,就有好几个同学就问我,在面试中被问到这样一个问题。Spring中的Bean是不是线程安全的。大家总觉得在面试过程差了一点意思。但是又说不上来是什么原因。这是因为,大家可能对Spring的本质还欠缺一些深度的思考。其实,Spring中的Bean是否线程安全,其实跟Spring容器本身无关。Spring框架中没有提供线程安全的策略,因此,Spring容器中在的Bean本身也不具备线程安全的特性。咱们要透。原创 2023-12-20 10:33:10 · 349 阅读 · 0 评论 -
大厂面试题-为什么有些公司禁止使用@Transactional声明式事务
加@Transaction声明式事务,如果一个方法中的存在较多耗时操作,就容易引发长。果方法存在嵌套调用,而被嵌套调用的方法也声明了@Transaction事物,就会。因此大家可以沿着@Transaction声明式事务可能存在的问题去说就好了。所以是否要使用也和@Transaction注解的特性和特定的环境有关系。事物问题,而长事物会带来锁的竞争影响性能,同时也会导致数据库。所以,为了避免这类问题,有些公司会推荐使用编程。事务的范围,减少事务的锁定时间,提高系统的性能。辑放在注解中,如果项目的复杂度增加,原创 2023-12-20 10:32:48 · 487 阅读 · 0 评论 -
大厂面试题-为什么Spring中每个Bean都要定义作用域
5、globalSession,用来定义一个作用范围仅在中的Bean。是说在每次请求获取Bean的时都会重新创建实例,因此每次获取到的实例对象都是不同的。Spring配置中,我们可以通过scope属性来定义Spring Bean的作用域,可以接受。来定义一个作用范围仅在session中的Bean,也就是说在每次HTTP。这样,唐僧访问不到圈外的资源,作用范围仅在request中的Bean,也就是说在每次HTTP。Spring中的Bean默认都是单例的。,选择定义不同的作用域,以保护Bean的使用。原创 2023-12-20 10:32:25 · 345 阅读 · 0 评论 -
大厂面试题-Spring Bean的定义包含哪些内容
1、beanClass对应的配置是class,这个属性为必填项,用于指向一个具体存在的Java类,Spring容器创建的Bean就是这个Java类的实例。我们可以对照源码来看,BeanDefinition的基础实现类AbstractBeanDefinition类,我们可以看到,BeanDefinition中定义的属性和声明式的配置内容从命名上看比较类似。存到一个叫做beanDefinitionMap的容器中,这个容器是Map类型,以Bean。需要再次读取和解析配置文件,只需要根据Bean的唯一标识,去。原创 2023-12-20 10:32:09 · 777 阅读 · 0 评论 -
大厂面试题-谈谈你对Spring Bean的理解
它们分别是@Controller,声明为控制层组件的Bean,@Service,声明为业务逻辑层组件的Bean,@Repository,声明为数据访问层组件的Bean,当对组件的层次难以定位的时候使用@Component注解来声明。这段代码是标准的Spring配置内容,咱们从上往下来看,首先导入一个叫做resource1.xml的标准配置文件,然后,导入了第二个标准的配置文件resource2.xml,接着,定义了一个叫做userService的Bean,对应的类是。实现零配置,消除XML配置文件的场景。原创 2023-12-20 10:31:47 · 936 阅读 · 0 评论 -
大厂面试题-Spring AOP原理
SpringAOP在Spring体系中深不可测,SpringAOP原理也是经常在互联网大厂面试时被问到,今天,给大家抽丝剥茧,详细到你无法想象。划分为四个阶段给大家介绍:创建代理对象阶段、拦截目标对象阶段、调用代理对象阶段、调用目标对象阶段。SpringAOP设计原理UML图。下面详细介绍每个阶段的执行细节。第一阶段:创建代理对象阶段在Spring中,创建Bean实例都是从getBean()方法开始的,在实。原创 2023-12-20 10:30:36 · 399 阅读 · 0 评论 -
大厂面试题-请简述Spring MVC的执行流程
SpringMVC的执行流程划分为三个阶段配置阶段、初始化阶段和运行阶段。下面详细介绍每个阶段的执行细节:第一阶段:配置阶段配置阶段,主要是完成对xml配置和注解配置。具体步骤如下:首先,从web.xml开始,配置DispatcherServlet的url匹配规则和Spring主配置文件的加载路径然后,就是配置注解,比如@Controller、@Service、@Autowrited以及@RequestMapping等。第二阶段:初始化阶段初始化阶段。原创 2023-12-20 10:30:22 · 385 阅读 · 0 评论 -
大厂面试题-Spring为何需要三级缓存解决循环依赖,而不是二级缓存
Bean存入到二级缓存,否则,便会标记该Bean存在循环依赖,然后将等待下一次轮询赋值,也就是解析@Autowir。总结一下,Spring一级缓存中存放所有的成熟Bean,二级缓存中存放所有的早期Bea。1、相互依赖,也就是A依赖B,B又依赖A,它们之间形成了循环依赖。3、自我依赖,也是A依赖A形成了循环依赖自己依赖自己。.单例的代理Bean通过Setter注入的情况,不能解决循环依赖问题。实例保存到三级缓存,最终也会将赋值好的Bean同步到一级缓存中。造器注入的Bean的情况,不能解决循环依赖问题。原创 2023-12-20 10:30:10 · 479 阅读 · 0 评论 -
大厂面试题-Spring Bean的生命周期全过程
Spring生命周期全过程大致分为五个阶段:创建前准备阶段、创建实例阶段、依赖注入阶段、容器缓存阶段和销毁实例阶段。这张图呢展示了Spring Bean生命周期完整流程,其中对每个阶段的具体操作做了详细介绍。下面我们来分析一下每个阶段的细节。一、创建前准备阶段这个阶段主要是在开始Bean加载之前,从Spring上下文和相关配置中解析并查找Bean有关的配置内容,比如init-method-容器在初始化bean时调用的方法、destory-method,容器在销毁Bean时调用的方法。原创 2023-12-20 10:29:46 · 411 阅读 · 0 评论 -
大厂面试题-@Conditional注解有什么用
@Condition是Spring4.x版本引入的一个注解,由于这个问题本身比较简单,所以考察范围一般是工作1到3年左右。考察目的就是了解求职者对Spring Framework里面注解的了解情况。作为求职者,回答的时候不过过度解读面试官的意图,简单明了的回复即可。@Conditional是Spring4版本里面提供的注解,它的作用是给需要装载的Bean增加一个条件判断,只有满足条件的Bean才会装载到IOC容器。@Conditional注解的定义如图所示,从这个注解中可以了解到几个关键信息 1、@C原创 2023-12-19 14:56:54 · 344 阅读 · 0 评论 -
大厂面试题-Spring如何解决循依赖问题
5、接着BeanA开始对属性BeanB进行依赖注入,于是开始初始化BeanB,同样做两件事,创建BeanB实例,以及加入到三级缓存。7、BeanB初始化成功以后保存到一级缓存,于是BeanA可以成功拿到BeanB的实例,从而完成正常的依赖注入。2、第二级缓存里面存储的是实例化以后,但是还没有设置属性值的Bean实例,也就是Bean里面的依赖注入还没有做。6、然后,BeanB也开始进行依赖注入,在三级缓存中找到了BeanA,于是完成BeanA的依赖注入。2、第二级缓存存放原始的Bean对象,也就是说Bea。原创 2023-12-19 14:33:56 · 359 阅读 · 0 评论 -
大厂面试题-谈谈你对Spring IOC和DI的理解
(如图)在传统的Java程序开发中,我们只能通过new关键字来创建对象,这种导致程序中对象的依赖关系比较复杂,耦合度较高。另外,为了更加灵活的实现Bean实例的依赖注入,Spring还提供了@Resource和@Autowired这两个注解。了IOC容器来管理Bean以后,相当于把对象的创建和查找依赖对象的控制权交给了。使得对象与对象之间是一种松耦合状态,极大提升了程序的灵活。分别是根据bean的id和bean的类型来实现依赖注入。自动实现依赖对象的实例注入,通常有三种方法来描述B。性以及功能的复用性。原创 2023-12-19 14:27:04 · 295 阅读 · 0 评论 -
大厂面试题-Spring里面的事务和分布式事务的使用如何区分,以及这两个事务之间有什么关联
这种事务的管理,主要是针对单个数据库里面多个数据表操作的,去满足事务的ACID特性。以使用一些主流的事务解决框架,比如Seata,集成到Spring生态里面,在Spring里面并没有提供事务,它只是提供了对数据库事务管理的封装。再需要关心连接的获取、连接的关闭、事务提交、事务回滚这些操作。传统的关系型数据库不支持跨库事务的操作,所以需要引入分布式事。所以,Spring里面的事务,本质上就是数据库层面的事务,务,是解决多个数据库的事务操作的数据一致性问题,更加聚焦在业务开发层面。原创 2023-12-19 14:25:19 · 372 阅读 · 0 评论 -
大厂面试题-Spring中有两个id相同的bean,会报错吗,如果会报错,在哪个阶段报错
UserService01的实例,所以启动的时候会提示找不到UserServic。XML配置文件里面,不能存在id相同的两个bean,否则spring容器。Spring配置文件里面,可以存在id相同的两个bean。示一个Bean的唯一标志符号,所以Spring在启动的时候会去验证。如图)如果我们在同一个配置类里面声明多个相同名字的bean,在。这个错误,是在Spring IOC容器里面的B。Bean的声明,这种方式完全取代了XMl。Bean的时候,默认会多个相同id的。初始化之后的依赖注入阶段发生的。原创 2023-12-19 14:24:04 · 362 阅读 · 0 评论 -
大厂面试题-@Resource和@Autowired的区别
Autowired注解里面有一个required属性默认值是true,表示强制要求bean实例的注入,在应用启动的时候,如果IOC容器里面不存在对应类型的Bean,就会报错。2、@Autowired是Spring定义的注解,@Resource是JSR 250规范里面定义的注解,而Spring对JSR 250规范提供了支持。1、@Autowired是根据type来匹配,@Resource可以根据name和type来匹配,默认是name匹配。@Primary表示主要的bean,当存在多个相同类型的Be。原创 2023-12-19 14:20:34 · 343 阅读 · 0 评论 -
大厂面试题-说说你对Spring MVC的理解
然后DispatcherServlet寻找一个或者多个ViewResolver视图解析器,找到ModeAndView指定的视图,并把数据显示到客户端。的核心控制器DispatcherServlet,它负责对请求进行分发到对应的Contro。可以支持不同的视图,比如Freemark、velocity、JSP等等。Spring MVC的具体工作流程是,浏览器的请求首先会经过Spring。其次,Spring MVC的整体架构设计对Java Web里面的M。MVC模式而设计的,因此在开发MVC应用的时候。原创 2023-12-19 14:17:33 · 367 阅读 · 0 评论 -
大厂面试题-Spring中BeanFactory和FactoryBean的区别
1、BeanFactory是所有Spring Bean容器的顶级接口,它为Spring的容器定义了一套规范,并提供像getBean这样的方法从容器中获取指定的Bean实例。2、BeanFactory在产生Bean的同时,还提供了解决Bean之间的依赖注入的能力,也就是所谓的DI。它能够根据xml里面声明的Bean配置进行bean的加载和初始化,然后BeanFactor。,也就是说,我们可以自定义一个Bean并且加载到IOC容器里面。是一个接口,主要的功能是动态生成某一个类型的。它里面有一个重要的方法叫。原创 2023-12-19 14:14:26 · 325 阅读 · 0 评论 -
大厂面试题-Spring中有哪些方式可以把Bean注入到IOC容器
7. 实现ImportSelector接口,动态批量注入配置类或者Bean对象,这个在Spring。3. 使用@Configuration注解声明配置类,并使用@Bean注解实现Bean的定义,这。5. 使用FactoryBean工厂bean,动态构建一个Bean实例,Spring。种方式其实是xml配置方式的一种演变,是Spring迈入到无配置化时代的里程。OpenFeign里面的动态代理实例就是使用FactoryBean来实现的。Import注解,导入配置类或者普通的Bean。原创 2023-12-19 14:13:25 · 376 阅读 · 0 评论 -
大厂面试题-Spring中Bean的作用域有哪些
session,以sesssion会话为纬度,同一个session共享同一个Bean实例,不同的session产生不同的Bean实例。prototype,翻译成原型,意味着每次从IOC容器去获取指定Bean的时候,都会返回一个新的实例对象。globalSession,针对全局session纬度,共享同一个Bean实例。request,针对每一次http请求,都会创建一个新的Bean。的IOC容器,可以非常方便的去帮助我们管理应用里面的。,那意味着这些实例,是存在生命周期,也就是。原创 2023-12-19 14:12:26 · 352 阅读 · 0 评论 -
大厂面试题-为什么要使用Spring框架
2、IOC/DI:Spring通过IOC容器实现了Bean的生命周期的管理,以及通过DI实现依赖注入,从而实现了对象依赖的松耦合管理。5、事务管理:Spring通过AOP实现了事务的统一管理,对应用开发中的事务处理提供了非常灵活的支持。3、面向切面的编程(AOP):Spring 支持面向切面的编程,从而把应用业务逻辑和系统服务分开。它的核心目的是为了简化企业级应用程序的开发,使得开发者只需要关心业务需。非常完善的支持,更重要的是社区的活跃度和技术的成熟度。版本发布到现在,它的生态已经非常庞大了。原创 2023-12-19 14:09:19 · 384 阅读 · 0 评论 -
大厂面试题-说说Spring MVC的执行流程
6. 视图解析器根据名称找到视图,然后把数据模型填充到视图里面再渲染成Html内容返回给客户端。行流程,一个面试频率超级高的问题,但是缺难倒了无数的程序员。不过这里如果有配置拦截器,就会按照顺序执行拦截器里面的preHandle方。Controller以后,把请求参数传递给Controller里面的方法。的DispatcherSerlvet核心控制器,会接收到请求并转发给。析请求,根据请求信息和配置信息找到匹配的Controller。执行完以后,会返回一个ModeAndView,这里面会包括视。原创 2023-12-19 11:36:49 · 327 阅读 · 0 评论 -
大厂面试题-Spring中事务的传播行为有哪些
(如图)比如说,methodA()调用methodB(),两个方法都显示的开启了事务。就拿事务传播行为来说,它解决的核心问题是,多个声明了事务的方法相互调用的时候。SUPPORTED:表示以非事务的方式来运行,如果当前存在事务,则把当前。的Spring事物传播级别,如果当前存在事务,则加入这个事务,MANDATORY:强制事务执行,若当前不存在事务,则抛出异常。果当前存在事务,则嵌套在当前事务中执行。:表示支持当前事务,如果当前不存在事务,以非事务的方式执行。式执行,如果当前存在事务,则抛出异常。原创 2023-12-19 11:34:36 · 338 阅读 · 0 评论 -
大厂面试题-Spring是如何解决循环依赖问题的
Spring中设计了三级缓存来解决循环依赖问题,当我们去调用getBean()方法的时候,便会将目标Bean存入到二级缓存,否则,便会标记该Bean存在循环依赖,4.设置了@DependsOn的Bean的情况,不能解决循环依赖问题。建,此时会将创建好的实例保存到三级缓存,最终也会将赋值好的Bean。值的Bean称为成熟Bean),会将目标Bean存入到一级缓存。缓存中存放所有的早期Bean,先取一级缓存,再去二级缓存。,同时,加上标记是否存在循环依赖。B,B依赖C,C又依赖A,形成了循环依赖。原创 2023-12-19 11:31:47 · 374 阅读 · 0 评论 -
大厂面试题-请简述你对Spring MVC的理解
其对应的初始化方法是initFlashMapManager(context)在实际应用中,为了避免重复提交,我们可以在处理完post请求后重定向到另外一个get请求,这个get请求可以用来返回页面渲染需要的信息。其对应的初始化方法是initViewResolvers(context)ViewResolvers的主要作用是将String类型的视图名和Locale解析为View类型的视图。其对应的初始化方法是initHandlerMappings(context),在Spring。,它就是一个适配器。原创 2023-12-12 15:07:42 · 367 阅读 · 0 评论 -
大厂面试题-Spring Bean生命周期的执行流程
类或者配置其实是Spring提供给开发者,用来实现Bean加载过程中的扩展机制,在很多和Spring集成的中间件中比较常见,比如Dub。个阶段会触发一些扩展的调用,比如常见的扩展类:BeanPostProcessors。容器缓存阶段主要是把bean保存到容器以及Spring的缓存中,到了这个阶段,B。,常见的有,`init-method`这个属性配置的方法,会在这个阶。当Spring应用上下文关闭时,该上下文中的所有bean都会被销毁。反射来创建Bean的实例对象,并且扫描和解析Bean声明的一些。原创 2023-12-12 15:04:43 · 327 阅读 · 0 评论