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)使用普通工厂创建对象

相关文章
|
21天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
113 1
|
5天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
82 62
|
3天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
13 2
|
22天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第8天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建并配置 Spring Boot 项目,实现后端 API 和安全配置。接着,使用 Ant Design Pro Vue 脚手架创建前端项目,配置动态路由和菜单,并创建相应的页面组件。最后,通过具体实践心得,分享了版本兼容性、安全性、性能调优等注意事项,帮助读者快速搭建高效且易维护的应用框架。
29 3
|
23天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第7天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建 Spring Boot 项目并配置 Spring Security。接着,实现后端 API 以提供菜单数据。在前端部分,使用 Ant Design Pro Vue 脚手架创建项目,并配置动态路由和菜单。最后,启动前后端服务,实现高效、美观且功能强大的应用框架。
32 2
|
25天前
|
设计模式 缓存 Java
面试题:谈谈Spring用到了哪些设计模式?
面试题:谈谈Spring用到了哪些设计模式?
|
30天前
|
Java 程序员 Spring
Spring事务的1道面试题
每次聊起Spring事务,好像很熟悉,又好像很陌生。本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点。
Spring事务的1道面试题
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
85 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
2月前
|
XML Java 开发者
经典面试---spring IOC容器的核心实现原理
作为一名拥有十年研发经验的工程师,对Spring框架尤其是其IOC(Inversion of Control,控制反转)容器的核心实现原理有着深入的理解。
99 3
|
3月前
|
存储 缓存 Java
面试问Spring循环依赖?今天通过代码调试让你记住
该文章讨论了Spring框架中循环依赖的概念,并通过代码示例帮助读者理解这一概念。
面试问Spring循环依赖?今天通过代码调试让你记住