面试宝典-【spring】

目录

1.Spring是什么 ?

2.Spring框架中的单例bean是线程安全的吗?

3.IOC容器是什么? 

4.什么是依赖注入? 

6.什么是AOP ?

7.IOC容器初始化过程? 

8.Bean的生命周期? 

9.BeanFactory和FactoryBean的区别? 

10.Bean注入容器有哪些方式?

11.Spring自动装配的方式有哪些? 

12.AOP有哪些实现方式? 

13.Spring通知有哪些类型? 

14.Spring中的事务是如何实现的?

15.Spring中事务失效的场景有哪些? 

16.Spring中的循环引用? 


1.Spring是什么 ?

  • Spring是一款主流的Java EE轻量级开源框架
  • 用于简化Java企业级应用的开发难度和开发周期

2.Spring框架中的单例bean是线程安全的吗?

  • 不是线程安全的
  • 当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求对应的业务逻辑(成员方法),如果该处理逻辑中有对该单列状态的修改(体现为该单例的成员属性),则必须考虑线程同步问题。
  • Spring框架并没有对单例bean进行任何多线程的封装处理。

3.IOC容器是什么? 

loC-->“控制反转",它不是一门技术,而是一种设计思想

Spring通过loC容器来管理所有Java对象的实例化和初始化,控制对象与对象之间的依赖关系

  • 将对象的创建权交出去,交给第三方容器负责
  • 将对象和对象之间的关系维护权交出去,交给第三方容器负

4.什么是依赖注入? 

  • Spring创建对象的过程中,把对象依赖的属性注入到对象中。依赖注入主要有两种方式:构造器注入set注入

IOC就是一种思想,DI是对IOC的一种具体实现

6.什么是AOP ?

  • aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以做为公共日志保存,事务处理等

7.IOC容器初始化过程? 

  • 1.从XML中读取配置文件。
  • 2.将bean标签解析成BeanDefinition,如解析property元素,并注入到BeanDefinition实例中。
  • 3.将BeanDefinition注册到容器BeanDefinitionMap中。
  • 4. BeanFactory 根据 BeanDefinition 的定义信息创建实例化和初始化 bean。

8.Bean的生命周期? 

Spring容器在进行实例化时,会将xml配置的<bean>的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean

  • 1.bean对象的创建(调用无参构造)
  • 2.给bean对象设置相关属性
  • 3.bean后置处理器(初始化之前)
  • 4.bean对象初始化(调用指定的初始化方法)
  • 5.bean后置处理器(初始化之后)
  • 6.bean对象创建完成,可以使用了
  • 7.bean对象销毁(配置指定的销毁方法)
  • 8.IoC容器关闭

9.BeanFactory和FactoryBean的区别? 

  • BeanFactory:这是 loC 容器的基本实现,是 Spring 内部使用的接口。面向 Sping 本身,不提供给开发人员使用。几乎所有场合都使用ApplicationContext而不是底层的 BeanFactory
  • FactoryBean配置一个FactoryBean类型的bean,在获取bean的时候得到的并不是class属性中配置的这个类的对象,而是getObject()方法的返回值。

10.Bean注入容器有哪些方式?

  • 1.@Configuration用来声明一个配置类,然后使用 @Bean 注解,用于声明一个bean,将其加入到Spring容器中 
  • 2.@ComponentScan放置在我们的配置类上,然后可以指定一个路径,进行扫描带有特定注解的bean,然后加至容器中

11.Spring自动装配的方式有哪些? 

自动装配方式一: byType

  • byType:根据类型匹配IOC容器中的某个兼容类型的bean,为属性自动赋值
    • 若在IOC中,没有任何一个兼容类型的bean能够为属性赋值,则该属性不装配,即值为默认值null.
    • 若在IOC中,有多个兼容类型的bean能够为属性赋值,则抛出异常

自动装配方式二:byNam

  • byName:将自动装配的属性的属性名,作为bean的id在IOC容器中匹配相对应的bean进行赋值

bean标签里面的 id属性值必须和 自动装配的属性的属性名一致

12.AOP有哪些实现方式? 

  • AOP有两种实现方式:静态代理和动态代理。

静态代理

  • 静态代理:代理类在编译阶段生成,在编译阶段将通知织入Java字节码中,也称编译时增强。AspectJ使用的是静态代理。
  • 缺点:代理对象需要与目标对象实现一样的接口,并且实现接口的方法,会有冗余代码。同时,一旦接口增加方法,目标对象与代理对象都要维护。

动态代理

  • 动态代理:代理类在程序运行时创建,AOP框架不会去修改字节码,而是在内存中临时生成一个代理对象,在运行期间对业务方法进行增强,不会生成新类

13.Spring通知有哪些类型? 

  • 前置通知(Before):在目标方法被调用之前调用通知功能;
  • 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
  • 返回通知(After-returning ):在目标方法成功执行之后调用通知;
  • 异常通知(After-throwing):在目标方法抛出异常后调用通知;
  • 环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的逻辑。

14.Spring中的事务是如何实现的?

  • spring实现的事务本质就是aop完成,对方法前后进行拦截,在执行方法之前 开启事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

15.Spring中事务失效的场景有哪些? 

  • ① 异常捕获处理,自己处理了异常,没有抛出,解决:手动抛出
  • ②抛出检查异常,配置rollbackFor属性为Exception
  • ③非public方法导致的事务失效,改为public

16.Spring中的循环引用? 

循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A

循环依赖在spring中是允许存在,spring框架依据三级缓存已经解决了大部分的循环依赖

  • ① 一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象
  • ② 二级缓存:缓存早期的bean对象(生命周期还没走完)
  • ③三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建某个对象的

解决方案

  • 使用@Lazy进行懒加载,什么时候需要对象再进行bean对象的创建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/540964.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏开发需不需要考研?

近年来&#xff0c;中国游戏行业增速放缓&#xff0c;用户基数趋于饱和&#xff0c;行业监管日趋严格&#xff0c;国外竞争激烈&#xff0c;使游戏公司面临挑战。为适应形势&#xff0c;游戏企业正在调整策略&#xff0c;采取主动学习和实战练习的方式&#xff0c;提升游戏质量…

HTML案例-4.注册页面表单练习

效果 知识点 列表标签 无序列表 <ul><li>火锅</li><li>奶茶</li><li>烤肉</li> <ul> 有序列表 <ol><li>蛋挞</li><li>水煮鱼</li><li>麻辣香锅</li> </ol> 自定义列表…

TCP相关特性

协议段格式 • 源/⽬的端⼝号:表⽰数据是从哪个进程来,到哪个进程去; • 32位序号/32位确认号:后⾯详细讲; • 4位TCP报头⻓度:表⽰该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最⼤⻓度是15*460 • 6位标志位: ◦ URG:紧急指针是否有效 ◦ ACK:确认号是否有效…

朋友,代码库的“健身方案”要不要了解一下?

你有没有想过&#xff0c;你的代码库可能正面临“健康危机”—— 代码臃肿、低效交付、BUG隐藏、潜藏的安全风险…… “健身达人”上线 如果你的开发、安全和运维团队像是三位“健身达人”&#xff0c;那么极狐GitLab的DevSecOps线上成熟度评估&#xff0c;就是他们的“健身教…

SwiftUI组件-DatePicker

SwiftUI组件-DatePicker 本文记录一下SwiftUI组件-DatePicker import SwiftUIstruct DatePickerBootCamp: View {State var selectedDate: Date Date()var dateFormatter: DateFormatter {let formatter DateFormatter()formatter.dateStyle .shortformatter.timeStyle .…

计算机网络—VLAN 配置

目录 1.拓扑图 2.实验环境准备 2.关闭不相关接口&#xff0c;并配置 Trunk 3.创建 VLAN 4.为客户端配置 IP地址 5.检测设备连通性&#xff0c;验证 VLAN 配置结果 6.配置 Hybrid 端口 7.配置文件 1.拓扑图 2.实验环境准备 在S1和S2上创建Eth-Trunk 1并配置该Eth-Trunk…

力扣-20. 有效的括号(回顾知识哈希表,栈)

给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有…

TRACK:使用 Kubo 计算相关电子系统传输特性的 Python 代码

Figure 1 Figure 2 以上是我们分享的一些经验或者文章的搬运&#xff0c;或有不足&#xff0c;欢迎大家指出&#xff01; 如有侵权&#xff0c;请联系我立马删除&#xff01; 详细内容&#xff08;文章题目、文章链接、附件下载&#xff09;可在微 信 公 众 号&#xff1a;原…

vue methods 函数为啥不能是箭头函数

1、首先&#xff0c;因为methods里面的方法中的this是可以拿到data中定义的属性&#xff0c;所以它肯定不是window,但是methods 中 箭头函数里面的this指向window所以methods里面的方法不能定义箭头函数。 下面用代码说明为啥 methods中箭头函数中的this指向window <div i…

【开源】SpringBoot框架开发公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

Fix a Tree(树的遍历,判断是否有环 并连成一颗树 )

题意翻译 对于下图中的树&#xff0c; 可以用数组表示为 [2,3,3,2]。这种可以表示树的数组&#xff08;即有效&#xff09;需要符合以下条件&#xff1a; 有且只有一个索引 r &#xff0c;符合pr​r 。其中顶点 r 是树的根。对于所有剩下的 n−1 个顶点 i 一定要有在 i 和 pi…

浏览器同源策略及跨域问题

同源策略&#xff1a;同源策略是一个重要的安全策略&#xff0c;它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介。 同源策略的作用&#xff1a;保护浏览器中网站的安全&#xff0c;限制ajax只…