SpringBoot面试

标题

  • 1、SpringBoot的自动配置原理
  • 2、Spring 中事务的传播行为有哪些?
  • 3、Spring 中 Bean 的作用域有哪些?
  • 4、Spring 中 BeanFactory 和FactoryBean 的区别
  • 5、如何理解 Spring Boot 中的 Starter?
  • 6、@Resource 和 @Autowired 的区别

1、SpringBoot的自动配置原理

SpringBoot的自动配置原理

2、Spring 中事务的传播行为有哪些?

首选,所谓的事务传播行为,就是多个声明了事务的方法相互调用的时候,这个事务应该如何传播。
比如说,methodA()调用 methodB(),两个方法都显示的开启了事务。
跟着Mic学架构 跟着Mic学架构 跟着Mic学架构 跟着Mic学架构 跟着Mic学架构 跟着Mic学架构 跟着Mic学架构 跟着Mic学架构 跟着Mic学架构
那么 methodB()是开启一个新事务,还是继续在 methodA()这个事务中执行?就取 决 于 事 务 的 传 播 行 为 。
在 Spring 中,定义了 7 种事务传播行为。

  • REQUIRED:默认的 Spring 事物传播级别,如果当前存在事务,则加入这个事
    务,如果不存在事务,就新建一个事务。
  • REQUIRE_NEW:不管是否存在事务,都会新开一个事务,新老事务相互独立。
    外部事务抛出异常回滚不会影响内部事务的正常提交。
  • NESTED:如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务,
    则新建一个事务,类似于 REQUIRE_NEW。
  • SUPPORTS:表示支持当前事务,如果当前不存在事务,以非事务的方式执行。
  • NOT_SUPPORTED:表示以非事务的方式来运行,如果当前存在事务,则把当
    前事务挂起。
  • MANDATORY:强制事务执行,若当前不存在事务,则抛出异常. NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。

3、Spring 中 Bean 的作用域有哪些?

  • singleton,也就是单例,意味着在整个 Spring 容器中只会存在一个 Bean 实例。
  • prototype,翻译成原型,意味着每次从 IOC 容器去获取指定 Bean 的时候,都会返回一个新的实例对象。
  • request,针对每一次 http 请求,都会创建一个新的 Bean
  • session,以 sesssion 会话为纬度,同一个 session 共享同一个 Bean 实例,不同的 session 产生不同的 Bean 实例
  • globalSession,针对全局 session 纬度,共享同一个 Bean 实例

4、Spring 中 BeanFactory 和FactoryBean 的区别

首先,Spring 里面的核心功能是 IOC 容器,所谓 IOC 容器呢,本质上就是一个
Bean 的容器或者是一个 Bean 的工厂。
它能够根据 xml 里面声明的 Bean 配置进行 bean 的加载和初始化,然后
BeanFactory 来生产我们需要的各种各样的 Bean。
所以我对 BeanFactory 的理解了有两个。
BeanFactory 是所有 Spring Bean 容器的顶级接口,它为 Spring 的容器定义了
一套规范,并提供像 getBean 这样的方法从容器中获取指定的 Bean 实例。
BeanFactory 在产生 Bean 的同时,还提供了解决 Bean 之间的依赖注入的能力,
也就是所谓的 DI。
FactoryBean 是一个工厂 Bean,它是一个接口,主要的功能是动态生成某一个
类型的 Bean 的实例,也就是说,我们可以自定义一个 Bean 并且加载到 IOC 容
器里面。
它里面有一个重要的方法叫 getObject(),这个方法里面就是用来实现动态构建
Bean 的过程。

5、如何理解 Spring Boot 中的 Starter?

6、@Resource 和 @Autowired 的区别

@Resource 和@Autowired 这两个注解的作用都是在 Spring 生态里面去实现
Bean 的依赖注入。
下面我分别说一下@Autowired 和@Resource 这两个注解。
闪现 [@Autowired 的作用详解 ] 几个字。
首先,@Autowired 是 Spring 里面提供的一个注解,默认是根据类型来实现 Bean的依赖注入。 @Autowired 注解里面有一个 required 属性默认值是 true,表示强制要求 bean
实例的注入,
在应用启动的时候,如果 IOC 容器里面不存在对应类型的 Bean,就会报错。
当然,如果不希望自动注入,可以把这个属性设置成 false。
其次呢, 如果在 Spring IOC 容器里面存在多个相同类型的 Bean 实例。由于
@Autowired 注解是根据类型来注入 Bean 实例的
所以 Spring 启动的时候,会提示一个错误,大概意思原本只能注入一个单实例
Bean,但是在 IOC 容器里面却发现有多个,导致注入失败。
当然,针对这个问题,我们可以使用 @Primary 或者@Qualifier 这两个注解来
解决。 @Primary 表示主要的 bean,当存在多个相同类型的 Bean 的时候,优先使用声
明了@Primary 的 Bean。 @Qualifier 的作用类似于条件筛选,它可以根据 Bean 的名字找到需要装配的目标 Bean。
闪现 [@Resource 的作用详解 ] 几个字。
接下来,我再解释一下@Resource 注解。 @Resource 是 JDK 提供的注解,只是 Spring 在实现上提供了这个注解的功能
支持。
它的使用方式和@Autowired 完全相同,最大的差异于@Resource 可以支持
ByName 和 ByType 两种注入方式。
如果使用name,Spring就根据bean的名字进行依赖注入,如果使用type,Spring
就根据类型实现依赖注入。
如果两个属性都没配置,就先根据定义的属性名字去匹配,如果没匹配成功,再
根据类型匹配。两个都没匹配到,就报错

你可能感兴趣的:(#,Spring面试,面试,职场和发展)