详解Spring配置文件

news/2024/11/17 22:30:29/

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:JavaEE、Spring

Spring配置文件

  • 1、简介
  • 2、XML
  • 3、\<Bean\>
    • 3.1、Bean标签范围配置
    • 3.2、生命周期
    • 3.3、⭐实例化
    • 3.4、依赖注入
      • 3.4.1、简介
      • 3.4.2、简述步骤
      • 3.4.3、注入方式
      • 3.4.4、注入的数据类型
      • 3.4.5、引入其他配置文件

1、简介

在Spring框架中,有多种方式可以进行配置,包括使用XML配置文件、使用Java注解和使用Java配置类。下面将对这些配置方式进行简要介绍:

  1. XML配置文件: XML配置文件是传统和最常见的配置方式之一。通过在XML文件中定义配置元素和属性,可以描述应用程序的组件、依赖关系和其他配置信息。XML配置文件通常使用Spring的命名空间和标签来表示不同的配置元素,如bean、property、constructor-arg等。
    示例:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userService" class="com.example.UserService"><property name="userRepository" ref="userRepository" /></bean><bean id="userRepository" class="com.example.UserRepositoryImpl" /></beans>
  1. Java注解: Java注解是一种更为简洁和直观的配置方式。通过在Java类、方法和字段上添加注解,可以指示Spring框架如何处理它们。注解可以用于定义Bean、依赖注入、作用域、切面等。常用的注解包括@Component、@Autowired、@Configuration等。示例:
@Configuration
public class AppConfig {@Beanpublic UserService userService() {return new UserService(userRepository());}@Beanpublic UserRepository userRepository() {return new UserRepositoryImpl();}}
  1. Java配置类: Java配置类是一种基于纯Java代码的配置方式,它使用特定的类来定义和组织Spring的配置信息。通常,一个Java配置类被注解为@Configuration,然后使用@Bean注解来声明Bean定义。与XML配置文件类似,Java配置类可以定义Bean之间的依赖关系和其他配置细节。示例:
@Configuration
public class AppConfig {@Beanpublic UserService userService(UserRepository userRepository) {return new UserService(userRepository);}@Beanpublic UserRepository userRepository() {return new UserRepositoryImpl();}}

无论使用哪种配置方式,Spring框架都会读取和解析配置信息,并根据配置创建和管理应用程序的对象和组件。
配置文件中定义的Bean可以通过IoC容器进行实例化、依赖注入和生命周期管理,从而实现对象之间的解耦和灵活性。配置文件还可以配置切面、数据源、事务管理等其他方面的细节。
需要注意的是,随着Spring框架的发展,推荐使用基于注解或Java配置类的方式进行配置,因为它们更加简洁、类型安全,并且提供了更好的可读性和可维护性。但对于一些传统项目或需要与第三方库进行整合的情况,仍然可以使用XML配置文件。

2、XML

Spring的XML配置文件是一种传统且广泛使用的配置方式,用于描述Spring应用程序的组件、依赖关系和其他配置信息。XML配置文件使用Spring的命名空间和标签来表示不同的配置元素,例如<beans>、<bean>、<property>、<constructor-arg>等。
下面是XML配置文件中常用的配置元素和其功能的详细介绍:

  1. <beans>元素:<beans>元素是XML配置文件的根元素,它包含了整个配置文件的内容。通过指定命名空间和模式位置,可以定义Spring的命名空间和相关的XML模式。示例:
    在这里插入图片描述

  2. <bean>元素:<bean>元素用于定义Spring容器中的一个Bean。通过指定id属性和class属性,可以指定Bean的标识和类型。可以使用其他属性如scope、init-method、destroy-method来进一步配置Bean的作用域、初始化和销毁方法。示例:
    在这里插入图片描述

  3. <property>元素:<property>元素用于为Bean设置属性值。通过指定name属性和对应的值,可以将值注入到Bean的属性中。值可以是字面值或引用其他Bean。示例:
    在这里插入图片描述

  4. <constructor-arg>元素:<constructor-arg>元素用于通过构造函数注入参数值。通过指定index属性或type属性和对应的值,可以指定参数的位置或类型。值可以是字面值或引用其他Bean。示例:
    在这里插入图片描述

  5. 命名空间和标签: Spring提供了多个命名空间和对应的标签,用于简化和扩展配置。例如,<context:component-scan>标签用于自动扫描组件并进行自动装配,<aop:aspectj-autoproxy>标签用于启用AspectJ自动代理等。示例:
    在这里插入图片描述

通过XML配置文件,可以定义应用程序中的各种Bean、依赖关系、作用域、初始化和销毁方法等信息。XML配置文件提供了一种灵活且可读性较高的方式来配置Spring应用程序,适用于各种场景和需求。然而,随着Spring的发展,基于注解和Java配置类的方式越来越受欢迎,因为它们更加简洁、类型安全,并且提供了更好的可读性和可维护性。

3、<Bean>

在这里插入图片描述

3.1、Bean标签范围配置

属性描述
singleton默认值,每次请求都返回同一个Bean实例
prototype每次请求都返回一个新的Bean实例
request每次HTTP请求都返回同一个Bean实例(仅适用于Web应用程序)
session每次HTTP会话都返回同一个Bean实例(仅适用于Web应用程序)
global-session应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当于 session。
在全局HTTP会话中每次请求都返回同一个Bean实例(仅适用于Web应用程序)

singleton和prototype:
在这里插入图片描述

3.2、生命周期

配置元素描述
init-method在Bean实例化完成后,调用初始化方法
destroy-method在Bean销毁之前,调用销毁方法
@PostConstruct标注在方法上,指定方法为初始化方法
@PreDestroy标注在方法上,指定方法为销毁方法
实现接口实现InitializingBean接口和DisposableBean接口的方法

在Spring中,可以通过配置来管理Bean的生命周期。下面是几个常用的配置选项,用于定义Bean的初始化和销毁方法:

  1. init-method: 使用init-method属性指定Bean的初始化方法。该方法在Bean实例化后、依赖注入完成后调用。
    在这里插入图片描述

  2. destroy-method: 使用destroy-method属性指定Bean的销毁方法。该方法在Bean被销毁之前调用。
    在这里插入图片描述

可以同时指定多个初始化方法和销毁方法,使用逗号进行分隔:
在这里插入图片描述

除了通过配置文件,还可以使用注解来定义Bean的初始化方法和销毁方法。

  1. @PostConstruct: 使用@PostConstruct注解标记一个方法作为Bean的初始化方法。该方法在依赖注入完成后调用。
    在这里插入图片描述

  2. @PreDestroy: 使用@PreDestroy注解标记一个方法作为Bean的销毁方法。该方法在Bean被销毁之前调用。
    在这里插入图片描述

需要注意的是,使用注解方式需要在配置文件中启用对注解的支持(如<context:annotation-config >或<context:component-scan >)。
通过配置初始化方法和销毁方法,可以在Bean的生命周期的不同阶段执行一些特定的操作,如资源初始化、资源释放、连接打开、连接关闭等。这样可以确保Bean在使用前被正确初始化,并在不再需要时进行资源释放,提高应用程序的健壮性和可靠性。

3.3、⭐实例化

实例化方式描述
构造方法实例化通过调用Bean的构造方法来实例化对象
静态工厂方法实例化通过调用静态工厂方法来创建Bean的实例
实例工厂方法实例化通过调用实例工厂方法来创建Bean的实例

在Spring中,可以使用以下三种方式实例化Bean:

  1. 使用构造函数实例化: 这是最常见的实例化Bean的方式,通过调用Bean类的构造函数来创建Bean的实例。可以使用标签的constructor-arg元素来指定构造函数参数的值或引用。
    在这里插入图片描述

上述示例中,元素用于指定构造函数参数,通过value属性指定字面值参数,通过ref属性指定引用类型参数。
一般而言它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败
2. 使用静态工厂方法实例化: 可以使用静态工厂方法创建Bean的实例,通过调用工厂类的静态方法来创建对象。使用标签的factory-method属性指定工厂方法的名称。
在这里插入图片描述

上述示例中,MyBeanFactory是一个具有静态方法createInstance的工厂类,该方法返回MyBean的实例,如:
在这里插入图片描述

  1. 使用实例工厂方法实例化: 可以使用实例工厂方法创建Bean的实例,通过调用工厂对象的实例方法来创建对象。使用标签的factory-bean属性指定工厂对象的引用,factory-method属性指定工厂方法的名称。
    在这里插入图片描述
      如:
    在这里插入图片描述在这里插入图片描述

上述示例中,myBeanFactory是一个实例对象,类型为MyBeanFactory,通过调用其实例方法createInstance来创建MyBean的实例。
通过选择适当的实例化方式,可以根据具体的需求和场景创建Bean的实例。构造函数实例化适用于大多数情况,静态工厂方法和实例工厂方法提供了更高度的灵活性,可以实现更复杂的实例化逻辑和条件判断。

3.4、依赖注入

3.4.1、简介

依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。
Bean的依赖注入是指在Spring容器中,通过自动或显式的方式将Bean所依赖的其他对象注入到Bean中,以满足Bean的运行需要。依赖注入可以通过构造函数、Setter方法或字段进行注入。
在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。
IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。
那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。
简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

3.4.2、简述步骤

简单上手三个步骤:
① 创建 UserService,UserService 内部在调用 UserDao的save() 方法
在这里插入图片描述

② 将 UserServiceImpl 的创建权交给 Spring
在这里插入图片描述

③ 从 Spring 容器中获得 UserService 进行操作
在这里插入图片描述

下面是分析:
目前UserService实例和UserDao实例都存在与Spring容器中,当前的做法是在容器外部获得UserService
实例和UserDao实例,然后在程序中进行结合。
在这里插入图片描述

因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以可以在 Spring容器中,将UserDao设置到UserService内部。
在这里插入图片描述

3.4.3、注入方式

注入方式有两种:构造函数注入和Setter方法注入

  1. 构造函数注入: 通过构造函数注入依赖项时,Bean的构造函数接受依赖项作为参数,并在创建Bean实例时进行注入。
    在这里插入图片描述

  在XML配置文件中,使用元素指定构造函数参数的值或引用。
  在这里插入图片描述

  1. Set方法注入: 通过Setter方法注入依赖项时,Bean类提供Setter方法,用于设置依赖项的值。
    在这里插入图片描述

  在XML配置文件中,使用元素指定Setter方法注入的值或引用。
  在这里插入图片描述

  1. P命名空间注入(本质也是Set注入):P命名空间注入本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中,如下:
    首先,需要引入P命名空间:
    在这里插入图片描述

  其次,需要修改注入方式:
在这里插入图片描述

  1. 字段注入: 通过字段注入依赖项时,Bean类的依赖项字段上使用@Autowired注解。
    在这里插入图片描述

  在XML配置文件中,需要启用注解扫描(<context:annotation-config />)以支持自动注入。
  在这里插入图片描述

通过依赖注入,我们可以解耦对象之间的依赖关系,使代码更灵活、可维护和可测试。Spring容器负责解析依赖关系,并在适当的时候将依赖项注入到Bean中,大大简化了开发过程。

3.4.4、注入的数据类型

数据类型注入方式
基本数据类型构造函数注入、Setter方法注入、注解方式
引用类型Setter方法注入、注解方式
集合类型Setter方法注入、注解方式
数组类型Setter方法注入、注解方式
注解类型注解方式
枚举类型Setter方法注入、注解方式
泛型类型Setter方法注入、注解方式
接口类型Setter方法注入、注解方式

下面是对八种数据类型的注入方式进行详细分析:

  1. 基本数据类型(Primitive Types):基本数据类型的注入可以通过构造函数注入、Setter方法注入或通过注解实现。在构造函数注入中,可以直接在构造函数参数中声明基本数据类型,并在配置文件中指定相应的值。在Setter方法注入中,可以通过Setter方法设置基本数据类型的值。注解方式可以使用@Value注解将基本数据类型的值直接注入到Bean中。
  2. 引用类型(Reference Types):引用类型的注入通常使用Setter方法注入或通过注解实现。在Setter方法注入中,可以在Bean的配置文件中通过ref属性指定依赖的Bean名称,Spring会自动将相应的Bean注入到该属性中。注解方式可以使用@Autowired注解将依赖的Bean自动注入到属性中。
  3. 集合类型(Collection Types):集合类型的注入可以通过Setter方法注入或通过注解实现。在Setter方法注入中,可以在配置文件中使用、、等标签定义集合类型的元素,并通过ref属性指定依赖的Bean名称。注解方式可以使用@Autowired注解结合@Qualifier注解指定集合类型的元素。
  4. 数组类型(Array Types):数组类型的注入可以通过Setter方法注入或通过注解实现。在Setter方法注入中,可以在配置文件中使用标签定义数组类型的元素,并通过ref属性指定依赖的Bean名称。注解方式可以使用@Autowired注解结合@Qualifier注解指定数组类型的元素。
  5. 注解类型(Annotation Types):注解类型的注入通常使用注解方式实现。可以使用@Autowired注解将注解类型的Bean注入到属性中。
  6. 枚举类型(Enum Types):枚举类型的注入通常使用Setter方法注入或通过注解实现。在Setter方法注入中,可以在配置文件中指定枚举类型的值。注解方式可以使用@Value注解将枚举类型的值注入到Bean中。
  7. 泛型类型(Generic Types):泛型类型的注入通常使用Setter方法注入或通过注解实现。在Setter方法注入中,可以在配置文件中指定泛型类型的值,并通过ref属性指定依赖的Bean名称。注解方式可以使用@Autowired注解结合@Qualifier注解指定泛型类型的值。
  8. 接口类型(Interface Types):接口类型的注入通常使用Setter方法注入或通过注解实现。在Setter方法注入中,可以在配置文件中通过ref属性指定实现该接口的Bean名称。注解方式可以使用@Autowired注解结合@Qualifier注解指定接口类型的Bean。

通过上述的注入方式,可以满足不同类型数据的注入需求,实现对象之间的依赖关系和灵活组装。具体选择哪种方式,取决于具体的应用场景和需求。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.4.5、引入其他配置文件

实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载,有利于分模块开发。
在Spring中,可以使用标签来引入其他配置文件。这可以帮助我们将配置文件模块化,使其更易于管理和维护。

下面是使用标签引入其他配置文件的示例:
假设我们有两个配置文件:app-config.xml和data-config.xml,其中data-config.xml是一个用于配置数据源的文件。
在这里插入图片描述


http://www.ppmy.cn/news/560822.html

相关文章

SQL死锁查询及处理,死锁知识了解

SQL死锁查询及处理&#xff0c;死锁知识了解 现象 表现一: 一个用户A 访问表A(锁住了表A),然后又访问表B 另一个用户B 访问表B(锁住了表B),然后企图访问表A 这时用户A由于用户B已经锁住表B&#xff0c;它必须等待用户B释放表B,才能继续&#xff0c;好了他老人家就只好老老实…

Unreal 5 实现UI制作

这一篇讲解一下unreal engine里面的内置ui插件UMG&#xff0c;虚幻示意图形界面设计器&#xff08;Unreal Motion Graphics UI Designer&#xff09;(UMG) 是虚幻引擎内置的一套ui制作工具&#xff0c;通过它我们能够实现平面ui&#xff0c;场景hud内容 实现背景图片填充整个…

Android9.0 framework层InputDispatching造成的的ANR原理分析

1.前言 Android系统中,在app中进行一些操作时,系统中的ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会在app进行操作app时, 检测App的响应时间,如果App在特定时间无法响应屏幕触摸或键盘输入时间,或者特定事件没有处理完毕,就会出现ANR。 以下四个…

简单题:货物摆放

题目大意 给定一个 n n n&#xff0c; n 2021041820210418 n2021041820210418 n2021041820210418&#xff0c;问满足 a b c n a \times b\times cn abcn 的 ( a , b , c ) (a,b,c) (a,b,c) ​ 组合有多少种。 解题思路 ( a , b , c ) (a,b,c) (a,b,c) ​ 肯定是 n n n…

K8S调度器之污点和容忍

1. Taint和Toleration 节点亲和性&#xff0c;是pod的一种属性(偏好或硬性要求),它使pod被吸引到一类特定的节点。Taint则相反&#xff0c;它使节点能够排斥一类特定的pod。Taint和Toleration相互配合&#xff0c;可以用来避免pod被分配到不合适的节点上。每个节点上都可以应用…

Spring(五)基于注解的自动装配

注解&#xff1a;和XML配置文件一样&#xff0c;注解本身并不能执行&#xff0c;注解本身仅仅只是做一个标记&#xff0c;具体的功能是框架检测到注解标记的位置&#xff0c;然后针对这个位置按照注解标记的功能来执行具体操作。 本质上&#xff1a;所以一切的操作都是java代码…

OpenCV从入门到进阶(一)

文章目录 opencv入门到进阶一、图像与视频的加载与展示&#xff1a;1、创建和显示窗口 import cv22、 加载图片3、 保存图片4、 视频采集5、 读取视频文件6、 视频录制7、 鼠标控制8、 TrackBar控件 opencv入门到进阶 一、图像与视频的加载与展示&#xff1a; 1、创建和显示窗…

相同的网下,mac网速很慢怎么解决

试了下只有这个链接可以解决我的问题 https://blog.csdn.net/PRliu/article/details/53945462?depth_1-utm_sourcedistribute.pc_relevant.none-task&utm_sourcedistribute.pc_relevant.none-task