当前位置: 首页 > article >正文

Spring相关知识点

什么是 spring?

Spring 是 个 java 企业级应用的开源开发框架 。 Spring 主要用来开发 Java 应用, 但是有些扩
展是针对构建 J2EE 平台的 web 应用 。 Spring 框 架目 标 是 简 化 Java
企业级应用开发 ,
并通过 POJO 为基础的编程模型促进良好的编程习惯。

使用 Spring 框架的好处是什么?

  轻量: Spring 是轻量的 ,基本的版本大约 2MB。
. 控制反转: Spring 通过控制反转实现了松散耦合 ,对象们给出它们的依 赖,而不是创建或查找依
赖的对象们。
面向切面的编程(AOP) : Spring 支持面向切面的编程 ,并且把应用业务 逻辑和系统服务分开。
容器: Spring 包含并管理应用中对象的生命周期和配置。
MVC 框架 :Spring 的 WEB 框架是个精心设计的框架 ,是 Web 框架的 一个很好的替代品。
咕泡科技出品,严禁商用。
  事务管理: Spring 提供一个持续的事务管理接口 ,可以扩展到上至本地 事务下至全局事务( JTA )。
异常处理: Spring 提供方便的 API 把具体技术相关的异常(比如由 JDBC , Hibernate or JDO 抛
出的)转化为一致的 unchecked 异常。

Spring 由哪些模块组成?

以下是 Spring 框架的基本模块:
. Core module
. Bean module
. Context module
. Expression Language module
. JDBC module
. ORM module
. OXM module
. Java Messaging Service(JMS) module
. Transaction module
. Web module
. Web-Servlet module
. Web-Struts module
. Web-Portlet module

核心容器(应用上下文) 模块。

这 是 基 本 的 Spring 模 块 ,提 供 spring 框 架 的 基础 功 能 , BeanFactory 是 任 何
以 spring 为基础的应用的核心。 Spring 框架建立在此模块之上,它使 Spring 成为一个容器。

BeanFactory – BeanFactory 实现举例。

Bean 工厂是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从真正的应用代码
中分离。
最常用的 BeanFactory 实现是 Xml BeanFactory 类。

XMLBeanFactory

最 常 用 的 就 是 org.springframework.beans.factory.xml.Xml BeanFactory
, 它 根 据 XML 文件中的定义加载 beans。该容器从 XML 文件读取配置元数据并用它去创建一个完 全配置的 系统或应用。

解释 AOP 模块

AOP 模块用于发给我们的 Spring 应用做面向切面的开发 , 很多支持由 AOP 联盟提 供 , 这样
就确保了 Spring 和其他 AOP 框架的共通性 。 这个模块将元数据编程引入 Spring。
解释 JDBC 抽象和 DAO 模块。
通过使用 JDBC 抽象和 DAO 模块,保证数据库代码的简洁,并能避免数据库资源错误关闭导致的问 题 , 它在各种不同的数据库的错误信息之上 , 提供了一个统一的异常访问层。
它还利用 Spring 的 AOP 模块给 Spring 应用中的对象提供事务管理服务。

解释对象/关系映射集成模块。

Spring 通过提供 ORM 模块,支持我们在直接 JDBC 之上使用一个对象/关系映射 (ORM)工 具 ,
Spring 支 持集 成 主 流的 ORM 框 架 ,如 Hiberate,JDO 和
i BATIS SQL Maps。Spring
的事务管理同样支持以上所有 ORM 框架及 JDBC。

解释 WEB 模块。

Spring 的 WEB 模块是构建在 application context 模块基础之上 ,提供一个适合 web 应用的上下
文。这个模块也包括支持多种面向 web 的任务,如透明地处理多个文件上传 请求和程序级请求参数的绑定到你的业务对象。 它也有对 Jakarta Struts 的支持。

Spring 配置文件

Spring 配置文件是个 XML 文件,这个文件包含鸟类信息,描述了如何配置它们 , 以及如何相互调 用。

什么是 Spring IOC 容器?

Spring IOC 负 责 创 建 对 象 ,管 理 对 象 通过依赖注入( DI ),装配对象,配置对象 , 并
且管理这些对象的整个生命周期。

IOC 的优点是什么?

IOC 或依赖注入把应用的代码量降到最低。 它使应用容易测试,单元测试不再需要单例和 JNDI 查找 机制。
最小的代价和最小的侵入性使松散耦合得以实现。
OC 容器支持加载服务时的饿汉式初始化和懒加载。

ApplicationContext 通常的实现是什么?

. FileSystemXmlApplicationContext : 此容器从一个 XML 文件中加 载 beans 的定义 ,XML
Bean 配置文件的全路径名必须提供给它的构造函数。
. ClassPathXmlApplicationContext: 此容器也从一个 XML 文件中加 载 beans 的定义 ,这里 ,
你需要正确设置 classpath 因为这个容器将在 classpath 里找 bean 配置。
. WebXmlApplicationContext: 此容器加载一个 XML 文件 ,此文件定 义了一个 WEB 应用的所
有 bean。

Bean 工厂和 Application contexts 有什么区别?

Application contexts 提供一种方法处理文本消息 , 一个通常的做法是加载文件资 源( 比如镜
像) ,它们可以向注册为监听器的 bean 发布事件 。 另外,在容器或容 器 内 的 对 象 上 执 行
的 那 些 不 得 不由 bean 工厂以程 序化方式处理的操 作,可以在 Application contexts 中以声
明的方式处理 。
Application contexts 实现了 MessageSource 接口 , 该接口的实现以可插拔的方式提供获取本地
化消息的方法。

一个 Spring 的应用看起来像什么?

. 一个定义了一些功能的接口。
. 这实现包括属性 ,它的 Setter , getter 方法和函数等。
. Spring AOP。
. Spring 的 XML 配置文件。
. 使用以上功能的客户端程序。

什么是 Spring 的依赖注入?

依赖注入 ,是 IOC 的一个方面 ,是个通常的概念 ,它有多种解释。这概念是说你不用 创建对象 , 而只需要描述它如何被创建。你不在代码里直接组装你的组件和服务 , 但是 要在配置文件里描述哪 些组件需要哪些服务 , 之后一个容器( IOC 容器) 负责把他们组装起来。

有哪些不同类型的 IOC(依赖注入)方式?

. 构造器依赖注入: 构造器依赖注入通过容器触发一个类的构造器来实现 的,该类有一系列参数,每
个参数代表一个对其他类的依赖。
. Setter 方法注入 : Setter 方法注入是容器通过调用无参构造器或无参
static 工厂 方法实例化
bean 之后 ,调用该 bean 的 setter 方法 ,即实现了基 于 setter 的依赖注入。

哪种依赖注入方式你建议使用 ,构造器注入 ,还是 Setter 方法注 入?

你两种依赖方式都可以使用 , 构造器注入和 Setter 方法注入。最好的解决方案是用构造器参数实现
强制依赖 , setter 方法实现可选依赖。

Spring Beans

什么是 Spring beans?

Spring beans 是那些形成 Spring 应用的主干的 java 对象。它们被 Spring IOC 容器初 始化 ,
装配 , 和管理。这些 beans 通过容器中配置的元数据创建。 比如 , 以 XML 文件中 的形式定义。
Spring 框架定义的 beans 都是单件 beans。在 bean tag 中有个属性 singleton ,如 果 它 被 赋
为 TRUE , bean 就 是 单 件 ,否 则 就 是 一 个 prototype bean。默认是 TRUE ,所以
所有在 Spring 框架中的 beans 缺省都是单件。

一个 Spring Bean 定义 包含什么?

一个 Spring Bean 的定义包含容器必知的所有配置元数据 , 包括如何创建一个 bean , 它的生命
周期详情及它的依赖。

如何给 Spring 容器提供配置元数据?

这里有三种重要的方法给 Spring 容器提供配置元数据。XML 配置文件。
基于注解的配置。基 于 java 的配置。

你怎样定义类的作用域?

当定义一个在 Spring 里 , 我们还能给这个 bean 声明一个作用域。 它可以通过 bean 定 义中的
scope 属性来定义。如,当 Spring 要在需要的时候每次生产一个新的 bean 实
例,bean 的 scope 属性被指定为 prototype。
另一方面,一个 bean 每次使用的时候必须返回同一个实例 ,这个 bean 的 scope 属性必须设为
singleton。

解释 Spring 支持的几种 bean 的作用域。

Spring 框架支持以下五种 bean 的作用域:
. singleton : bean 在每个 Spring ioc 容器中只有一个实例。
. prototype :一个 bean 的定义可以有多个实例。
. request :每次 http 请求都会创建一个 bean ,该作用域仅在基于 web 的 Spring
ApplicationContext 情形下有效。
. session :在一个 HTTP Session 中 ,一个 bean 定义对应一个实例。该 作用域仅在基于 web 的
Spring ApplicationContext 情形下有效。
. global-session :在一个全局的 HTTP Session 中 ,一个 bean 定义对应 一个实例。该作用域仅
在基于 web 的 Spring ApplicationContext 情形下有效。
缺省的 Spring bean 的作用域是 Singleton.

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

不 , Spring 框架中的单例 bean 不是线程安全的。

解释 Spring 框架中 bean 的生命周期。

. Spring 容器 从 XML 文件中读取 bean 的定义 ,并实例化 bean。
. Spring 根据 bean 的定义填充所有的属性。
. 如 果 bean 实现了 BeanNameAware 接口,Spring 传 递 bean 的 ID 到 setBeanName
方法。
. 如果 Bean 实现了 BeanFactoryAware 接口 , Spring 传递 beanfactory 给 setBeanFactory
方法。
. 如果有任何与 bean 相关联的 BeanPostProcessors ,Spring 会在
postProcesserBeforeInitialization()方法内调用它们。
. 如果 bean 实现 Intializ ingBean 了 ,调用它的 afterPropertySet 方法 , 如果 bean 声明了
初始化方法 ,调用此初始化方法。
. 如果有 BeanPostProcessors 和 bean 关联 ,这些 bean 的 postProcessAfterInitialization()
方法将被调用。
. 如果 bean 实现了 DisposableBean ,它将调用 destroy()方法。

哪些是重要的 bean 生命周期方法?你能重载它们吗?

有两个重要的 bean 生命周期方法
第一个是 setup ,它是在容器加载 bean 的时候被调用 。
第二个方法是 teardown 它是在容器卸载类的时候被调用。
The bean 标签有两个重要的属性( in it-method 和 destroy-method)。用它们你可以自己定制
初始化和注销方法。 它们也有相应的注解( @PostConstruct 和 @PreDestroy )。

什么是 Spring 的内部 bean ?

当一个 bean 仅被用作另一个 bean 的属性时 , 它能被声明为一个内部 bean , 为了定义 inner
bean , 在 Spring 的 基于 XML 的 配置元数据中 , 可以在 或 元素内使用 元 素 , 内部
bean 通常是匿名的 , 它们的 Scope 一般是 prototype。

在 Spring 中如何注入一个 java 集合?

Spring 提供以下几种集合的配置元素:
. 类型用于注入一列值,允许有相同的值。
. 类型用于注入一组值,不允许有相同的值。
. 类型用于注入一组键值对,键和值都可以为任意类型。
. 类型用于注入一组键值对 ,键和值都只能为 String 类型。

什么是 bean 装配?

装配,或 bean 装配是指在 Spring 容器中把 bean 组装到一起,前提是容器需要知道 bean 的依赖
关系 , 如何通过依赖注入来把它们装配到一起。

什么是 bean 的自动装配?

Spring 容器能够自动装配相互合作的 bean ,这意味着容器不需要和配置 , 能通过 Bean 工厂自
动处理 bean 之间的协作。

解释不同方式的自动装配 。

有五种自动装配的方式,可以用来指导 Spring 容器用自动装配方式来进行依赖注入。
. no :默认的方式是不进行自动装配 ,通过显示设置 ref 属性来进行装配。
. byName: 通过参数名 自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置
成 byname ,之后容器试图匹配、装配和该 bean 的属 性具有相同名字的 bean。
. byType: 通过参数类型自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成
byType ,之后容器试图匹配、装配和该 bean 的属 性具有相同类型的 bean。如果有多个 bean 符
合条件 ,则抛出错误。
. constructor:这个方式类似于 byType ,但是要提供构造器参数,如 果没有确定的带参数的构造
器参数类型 ,将会抛出异常。
. autodetect: 首先尝试使用 constructor 来自动装配 ,如果无法工作, 则使用 byType 方式。

自动装配有哪些局限性 ?

自动装配的局限性是:
. 重写 :你仍需用和配置来定义依赖,意味着总要重写自动装配。
. 基本数据类型 :你不能自动装配简单的属性,如基本数据类型,String 字符串,和类。
. 模糊特性 : 自动装配不如显式装配精确 ,如果有可能 ,建议使用显式装配。
你可以在 Spring 中注入一个 null 和一个空字符串吗?
可以。

Spring 注解

什么是基于 Java 的 Spring 注解配置? 给一些注解的例子

基于 Java 的配置 , 允许你在少量的 Java 注解的帮助下 ,进行你的大部分 Spring 配置而非通过
XML 文件。
以 @Configuration 注解为例 , 它用来标记类可以当作一个 bean 的定义 , 被
Spring
IOC 容器使用 。 另 一 个例子是@Bean 注解 ,它表示此方法将要返回一个 对象 , 作为一个
bean 注册进 Spring 应用上下文。

什么是基于注解的容器配置?

相对于 XML 文件,注解型的配置依赖于通过字节码元数据装配组件,而非尖括号的声明。
开发者通过在相应的类 ,方法或属性上使用注解的方式 , 直接组件类中进行配置 , 而不是 使用
xml 表述 bean 的装配关系。

怎样开启注解装配?

注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在 Spring 配置文件中 配置
context:annotation-config/元素。
@Required 注解
这个注解表明 bean 的属性必须在配置的时候设置,通过一个 bean 定义的显式的属性值 或通过自
动装配 , 若 @Required 注解的 bean 属性未被设置 , 容器 将 抛出
BeanInitializationException。
@Autowired 注解
@Autowired 注解提供了更细粒度的控制 , 包括在何处以及如何完成自动装配。 它的用 法和
@Required 一样,修饰 setter 方法、构造器、属性或者具有任意名称和/或多个参数的 PN 方法。
@Qualifier 注解
当有多个相同类型的 bean 却只有一个需要自动装配时 , 将 @Qualifier 注解和 @Autowire
注解结合使用以消除这种混淆 , 指定需要装配的确切的 bean。

http://www.kler.cn/a/537145.html

相关文章:

  • mysql 不是内部或外部命令,也不是可运行的程序或批处理文件
  • 【centOS】搭建公司内网git环境-GitLab 社区版(GitLab CE)
  • Redis --- 使用Feed流实现社交平台的新闻流
  • CPU的基本结构
  • 在 Flownex 中创建自定义工作液
  • 集成Google Maps页面提示[For development purposes only]解决方案
  • Centos挂载镜像制作本地yum源,并补装图形界面
  • 要替换PPT左上角的logo,可以通过几种方法实现‌。
  • 知识库管理系统与ChatGPT:如何用生成式AI打造智能知识助手?
  • TEE笔记
  • 基于SpringBoot和Leaflet的全国省会城市风景区分布分析实践
  • C++ Primer 成员访问运算符
  • 游戏引擎学习第91天
  • ubuntu下nfs使用笔记
  • vscode预览插件
  • 初识C语言、C语言的学习方向总述与入门
  • 华为OD最新机试真题-补种未活胡树-C++-OD统一考试(E卷)
  • 远程调用总结
  • 哪些网站和工具可以用于站点测速和性能分析
  • 深入理解 Java 泛型(Generics)
  • 零基础学习书生.浦语大模型--基础岛
  • Explain 是 SQL 查询优化中非常重要的工具,它用于分析 SQL 查询的执行计划
  • ubuntu20使用tigervnc远程桌面配置记录
  • react的antd组件中上传图片组件,点击预览却打开新页面,将其改为放大预览
  • centos虚拟机迁移没有ip的问题
  • 论文笔记:Rethinking Graph Neural Networks for Anomaly Detection