Spring面试题pro版-2

简介: Spring面试题pro版-2


Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

ApplicationContext的实现类有哪些?

ClasspathxmlapplicationContext:

他是从类的根路径下加载配置文件。

FilesystemxmlApplicationContext:

他是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。

AnnotationConfigApplicationContext:

当我们使用注解容器配置容器对象时,需要使用此类来创建Spring 容器。它用来读取注解。

Bean标签的属性?

作用:用于配置对象让Spring创建。默认调用类中的无参构造函数,如果没有无参构造函数不能创建成功。

属性:

id,给bean一个唯一标识。

class:指定类的全限定类名。用于反射对象,默认情况下调用无参构造函数。

scope:指定对象的作用范围。

singleton:默认值。单例。

prototype:多例

request ,session ,global session。

init-method:指定类中初始化方法。

destory-method:指定类中的销毁方法。

Bean的作用范围和生命周期?

Bean在Spring框架中扮演着核心角色,它们代表了应用程序中的对象,并由Spring容器负责其创建、配置和管理。Bean的作用范围和生命周期是Spring框架中两个重要的概念。

Bean的作用范围

Bean的作用范围决定了Bean实例在Spring容器中的可见性和生命周期。Spring提供了几种不同的作用范围,以满足不同场景的需求:

  1. Singleton(单例):这是Spring中Bean的默认作用范围。在整个Spring容器中,无论多少次请求该Bean,都只会返回同一个Bean实例。这意味着Bean实例在容器初始化时创建,并在容器关闭时销毁,期间始终为同一个对象。
  2. Prototype(原型):对于原型作用范围的Bean,每次从容器中请求该Bean时,都会创建一个新的Bean实例。这意味着每次获取到的Bean都是一个新的对象。
  3. Request:这种作用范围的Bean只在一次HTTP请求的生命周期内有效。每次请求都会有一个新的Bean实例,不同请求之间的Bean实例不共享。
  4. Session:这种作用范围的Bean在整个用户会话期间有效。对于同一个用户的多次请求,都会返回同一个Bean实例。
  5. Global Session:这种作用范围通常用于Portlet环境,类似于Session,但在全局范围内有效。
  6. WebSocket:这种作用范围的Bean在WebSocket连接的生命周期内有效,仅适用于WebSocket应用程序。
Bean的生命周期

· singleton :一个应用只有一个对象的实例。它的作用范围就是整个引用。

生命周期:当应用加载,创建容器时,对象就被创建了。只要容器在,对象一直活着。当应用卸载,销毁容器

时,对象就被销毁了。

prototype:每次访问对象时,都会重新创建对象实例。

生命周期:当使用对象的时候,创建新的对象实例。只要对象在使用中,就一直活着。当对象长时间不用时, 被java的垃圾回收器回收了。

request:在一次http 请求中, 一个bean 定义对应一个实例。作用域仅在基于web 的Spring applicationContext 中有效。当请求处理结束后, request 域的实例会被销毁。

· session :一个HTTP Session 中,一个bean 定义对应一个实例。该作用域仅在基于web 的Spring

ApplicationContext 情形下有效。与request 作用域一样,可以根据需要放心的更改所创建实例的内部状态, 而别的HTTP Session 中根据userPreferences 创建的实例,将不会看到这些特定于某个HTTP Session 的状态 变化。当HTTP Session 最终被废弃的时候,在该HTTP Session 作用域内的bean 也会被废弃掉。

· globalsession:当一个bean 的作用域为global session,表示在一个全局的http session 中, 一个 bean 对 应一个实例。仅仅在基于portlet 的web应用中才有意义。Portlet 规范定义了全局Session 的概念,它被所有构成某个portlet web 应用的各种不同的portlet 所共享。在global session 作用域中定义的bean 被限定于全 局portlet Session 的生命周期范围内。

Spring循环依赖是如何解决的?

当我们的类A 中引用 B , B 引用C ,C 又引用A 的时候,这个时候会产生循环依赖。 Spring 所解决的循环依赖是有限

定条件的。首先bean 必须是要单例模式。其次需要通过get ,set 的方式注入才行。使用构造器方式注入和多例模 式都不能解决循环依赖的问题。

根据Spring 的初始化流程。 Spring 先是用构造实例化Bean 对象 ,此时Spring 会将这个实例化结束的对象放到一 个Map 中,并且Spring 提供了获取这个未设置属性的实例化对象引用的方法。

首先理解为我们先实例化A ,A 此时并没有,于是从一级缓存区中取A,取不到,然后取二级缓存区中取A,也取不 到,最后通过对象的匿名工厂方法,创建了一个未装载完毕的实例A。放入三级缓存区中。然后 B 对象依然与A 走 了一套相同的流程。 C 对象初始化的时候,发现所需要的A 已经有了,虽然是不完全的,但是也可以用,于是C 对 象的创建就完善了。放到一级缓存区中。 C 对象完善后, B 对象将创建好的C 对象初始化后,放到一级缓存区中。 B 对象也装载完毕,然后A 对象最后装载完毕。

Spring实例化bean有哪些方式?

(1)使用默认的无参构造函数

(2)使用静态工厂方式创建对象

(3)使用普通工厂创建对象

相关文章
|
2天前
|
Java Spring
Spring面试题pro版-5
Spring面试题pro版-5
16 0
|
2天前
|
Java Spring
Spring面试题pro版-4
Spring面试题pro版-4
15 0
|
2天前
|
XML Java 数据格式
Spring面试题pro版-3
Spring面试题pro版-3
30 0
|
2天前
|
监控 Java 应用服务中间件
Spring Boot 源码面试知识点
【5月更文挑战第12天】Spring Boot 是一个强大且广泛使用的框架,旨在简化 Spring 应用程序的开发过程。深入了解 Spring Boot 的源码,有助于开发者更好地使用和定制这个框架。以下是一些关键的知识点:
20 6
|
2天前
|
监控 Java 数据库连接
总结Spring Boot面试知识点
Spring Boot是一个基于Spring框架的开源项目,它简化了Spring应用的初始搭建以及开发过程。通过提供“约定优于配置”的方式,Spring Boot可以帮助开发者快速构建出生产级别的Spring应用。
15 0
|
2天前
|
设计模式 安全 Java
Spring面试题pro版-6
Spring面试题pro版-6
19 0
|
2天前
|
Java 数据库连接 API
Spring面试题pro版-1
Spring面试题pro版-1
17 0
|
2天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
57 0
|
2天前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
138 0
|
2天前
|
存储 JSON Java
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
48 2