Spring、SpringBoot面试题总结

开发框架面试题总结

1.spring是什么?

轻量级的开源的J2EE框架。它是⼀个容器框架,⽤来装javabean(java对象),中间层框架(万能胶) 可以起⼀个连接作⽤,⽐如说把Struts和hibernate粘合在⼀起运⽤,可以让我们的企业开发更快、更简 洁,Spring是⼀个轻量级的控制反转(IoC)和⾯向切⾯(AOP)的容器框架:

  • 从⼤⼩与开销两⽅⾯⽽⾔Spring都是轻量级的。
  • 通过控制反转(IoC)的技术达到松耦合的⽬的
  • 提供了⾯向切⾯编程的丰富⽀持,允许通过分离应⽤的业务逻辑与系统级服务进⾏内聚性的开发
  • 包含并管理应⽤对象(Bean)的配置和⽣命周期,这个意义上是⼀个容器。
  • 将简单的组件配置、组合成为复杂的应⽤,这个意义上是⼀个框架。

2.谈谈你对AOP的理解

系统是由许多不同的组件所组成的,每⼀个组件各负责⼀块特定功能。除了实现⾃身核⼼功能之外,这 些组件还经常承担着额外的职责。例如⽇志、事务管理和安全这样的核⼼服务经常融⼊到⾃身具有核⼼ 业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。

当我们需要为分散的对象引⼊公共⾏为的时候,OOP则显得⽆能为⼒。也就是说,OOP允许你定义从上 到下的关系,但并不适合定义从左到右的关系。例如⽇志功能。

⽇志代码往往⽔平地散布在所有对象层次中,⽽与它所散布到的对象的核⼼功能毫⽆关系。

在OOP设计中,它导致了⼤量代码的重复,⽽不利于各个模块的重⽤。

AOP:将程序中的交叉业务逻辑(⽐如安全,⽇志,事务等),封装成⼀个切⾯,然后注⼊到⽬标对象 (具体业务逻辑)中去。AOP可以对某个对象或某些对象的功能进⾏增强,⽐如对象中的⽅法进⾏增 强,可以在执⾏某个⽅法之前额外的做⼀些事情,在某个⽅法执⾏之后额外的做⼀些事情

3.谈谈你对IOC的理解

容器概念、控制反转、依赖注⼊

ioc容器:实际上就是个map(key,value),⾥⾯存的是各种对象(在xml⾥配置的bean节点、 @repository、@service、@controller、@component),在项⽬启动的时候会读取配置⽂件⾥⾯的 bean节点,根据全限定类名使⽤反射创建对象放到map⾥、扫描到打上上述注解的类还是通过反射创建 对象放到map⾥。

这个时候map⾥就有各种对象了,接下来我们在代码⾥需要⽤到⾥⾯的对象时,再通过DI注⼊ (autowired、resource等注解,xml⾥bean节点内的ref属性,项⽬启动的时候会读取xml节点ref属性 根据id注⼊,也会扫描这些注解,根据类型或id注⼊;id就是对象名)。

**控制反转:**没有引⼊IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运⾏到某⼀点的时候,⾃⼰必须 主动去创建对象B或者使⽤已经创建的对象B。⽆论是创建还是使⽤对象B,控制权都在⾃⼰⼿上。

引⼊IOC容器之后,对象A与对象B之间失去了直接联系,当对象A运⾏到需要对象B的时候,IOC容器会 主动创建⼀个对象B注⼊到对象A需要的地⽅。

通过前后的对⽐,不难看出来:对象A获得依赖对象B的过程,由主动⾏为变为了被动⾏为,控制权颠倒 过来了,这就是“控制反转”这个名称的由来。

全部对象的控制权全部上缴给“第三⽅”IOC容器,所以,IOC容器成了整个系统的关键核⼼,它起到了 ⼀种类似“粘合剂”的作⽤,把系统中的所有对象粘合在⼀起发挥作⽤,如果没有这个“粘合剂”,对象与 对象之间会彼此失去联系,这就是有⼈把IOC容器⽐喻成“粘合剂”的由来。

依赖注⼊:

“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由⾃身管理变为了由IOC容器 主动注⼊。依赖注⼊是实现IOC的⽅法,就是由IOC容器在运⾏期间,动态地将某种依赖关系注⼊到对象 之中。

4.如何实现一个IOC容器

1、配置文件配置包扫描路径

2、递归包扫描获取.class文件

3、反射、确定需要交给IOC管理的类

4、对需要注入的类进行依赖注入

  • 配置文件中指定需要扫描的包路径
  • 定义一些注解,分别表示访问控制层、业务服务层、数据持久层、依赖注入注解、获取配置文件注 解
  • 从配置文件中获取需要扫描的包路径,获取到当前路径下的文件信息及文件夹信息,我们将当前路 径下所有以.class结尾的文件添加到一个Set集合中进行存储
  • 遍历这个set集合,获取在类上有指定注解的类,并将其交给IOC容器,定义一个安全的Map用来 存储这些对象
  • 遍历这个IOC容器,获取到每一个类的实例,判断里面是有有依赖其他的类的实例,然后进行递归 注入

5.描述一下Spring Bean的生命周期?

1、解析类得到BeanDefinition

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

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

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

5、回调Aware方法,比如BeanNameAware,BeanFactoryAware

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

7、调用初始化方法

8、调用BeanPostProcessor的初始化后的方法,在这里会进行AOP

9、如果当前创建的bean是单例的则会把bean放入单例池

10、使用bean

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

6.BeanFactory和ApplicationContext有什么区别?

ApplicationContext是BeanFactory的子接口

ApplicationContext提供了更完整的功能:

①继承MessageSource,因此支持国际化。

②统一的资源文件访问方式。

③提供在监听器中注册bean的事件。

④同时加载多个配置文件。

⑤载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。

  • BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用 getBean()),才对该Bean进行加载实例化。这样,我们就不能发现一些存在的Spring的配置问 题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法 才会抛出异常。
  • ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我 们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。 ApplicationContext启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的 时候,你就不用等待,因为它们已经创建好了。
  • 相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置 Bean较多时,程序启动较慢。
  • BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot面试中,常见的问题包括但不限于以下几个方面: 1. 什么是Spring Boot?它的主要特点是什么? Spring Boot是一个用于简化Spring应用程序开发的框架。它通过提供一个约定优于配置的方式来减少开发者在配置方面的工作量。Spring Boot的主要特点包括自动配置、快速开发、无需部署WAR文件、嵌入式服务器等。 2. 为什么选择使用Spring Boot? 选择使用Spring Boot的原因有很多。首先,Spring Boot提供了大量的开箱即用的Starter,可以快速集成各种常用的功能和框架。其次,Spring Boot具有自动配置的特性,可以大大减少开发者的配置工作量。此外,Spring Boot还提供了一套完善的生态系统,可以方便地集成其他开源项目。 3. Spring Boot的核心组件有哪些? Spring Boot提供了许多核心组件来简化开发工作。其中一些常用的组件包括: - spring-boot-starter-web:用于创建REST API的组件。 - spring-boot-starter-data-jpa:用于连接SQL数据库的组件。 - spring-boot-starter-data-mongodb:用于连接MongoDB的组件。 - spring-boot-starter-aop:用于应用面向切面编程的组件。 - spring-boot-starter-security:用于实现安全性,如基于角色的身份验证的组件。 - spring-boot-starter-test:用于实现单元测试的组件。 - Actuator执行器API:用于监控和管理Spring Boot应用程序的组件。 4. 如何配置Spring Boot应用程序的数据源? 在Spring Boot中,可以通过在application.properties或application.yml文件中进行配置来指定数据源的相关信息,包括数据库的URL、用户名、密码等。例如,可以使用spring.datasource.url、spring.datasource.username和spring.datasource.password属性来配置数据源。 5. 如何启用Spring Boot应用程序的安全性? 要启用Spring Boot应用程序的安全性,可以添加spring-boot-starter-security依赖,并在配置类上添加@EnableWebSecurity注解。然后,可以使用@EnableGlobalMethodSecurity注解开启方法级别的安全性控制,并通过配置WebSecurityConfigurerAdapter的子类来定义安全规则。 总结起来,Spring Boot面试中常见的问题主要涉及Spring Boot的概念、特点、核心组件以及相关配置和安全性等方面。通过了解和掌握这些问题的答案,可以更好地应对Spring Boot相关的面试考察。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值