由 Spring IoC 容器管理的对象称为 Bean,Bean 根据 Spring 配置文件中的信息创建。
Spring 配置文件支持两种格式,即 XML 文件格式和 Properties 文件格式。
Spring容器支持XML和Propertie两种格式的配置文件。在实际开发中,最常用的就是XML格式的配置方式。通过XML文件来注册并管理Bean之间的依赖关系。
XML格式配置文件
通常情况下,Spring 的配置文件都是使用 XML 格式的。XML 配置文件的根元素是 ,该元素包含了多个子元素 。每一个 元素都定义了一个 Bean对象,并描述了该 Bean 是如何被装配到 Spring 容器中的。
例如:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 管理DruidDataSource对象-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Drive"/>
<property name="url" value="jdbc:mysql://location:3306/mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="@wzw123456"/>
</bean>
</beans>
定义Bean对象需要用到、标签,功能是一样的,只是不能包含子标签
、标签属于标签中的子标签,有如下属性:
属性名称 | 描述 |
---|---|
id | Bean 的唯一标识符,Spring IoC 容器对 Bean 的配置和管理都通过该属性完成。装配Bean时根据id值获取对象 |
name | 该属性可以为Bean指定多个名称,每个名称之间用逗号或分号隔开。Spring 容器可以通过 name 属性配置和管理容器中的 Bean。 |
class | 该属性指定了 Bean 的具体实现类,class属性值为该类的全路径名 |
scope | 设定Bean实例的作用范围,属性值可以为 singleton(单例)、prototype(原型)、request、session 和 global Session。默认值是 singleton。 |
init-method | 容器加载 Bean 时调用该方法,值为Bean具体实现类中的方法 |
destroy-method | 容器删除 Bean 时调用该方法,值为Bean具体实现类中的方法,该方法只在 scope=singleton 时有效 |
lazy-init | 懒加载,值为 true,容器在首次请求时才会创建 Bean 实例;值为 false,容器在启动时创建 Bean 实例。该方法只在 scope=singleton 时有效 |
元素中同样包含多个子元素,子元素介绍如下:
- constructor-arg:可以使用此元素传入构造方法的参数进行实例化。该元素的 index属性设置构造参数的序号(从0开始),type 属性指定构造参数类型,参数值可通过ref 属性或 value 属性直接指定,也可通过 ref 或 value 子元素指定。
- property:调用 Bean 实例中的 setter 方法完成属性赋值,从而完成依赖注入。该元素的 name 属性指定 Bean 实例中的相应属性名,ref 属性或 value 属性用于指定参数值。
- ref: 、等元素的属性或子元素,可用于指定对 Bean 工
厂中某个 Bean 实例的引用。值为另一个Bean对象的id或者name - value: Sproperty>、<constructor-arg>等元素的属性或子元素,可直接用于指定一
个常量值。 - list: 等元素的子元素,指定 bean 的属性类型为 List 或数组类型的属
性值。 - set:等元素的子元素,指定 bean 的属性类型为 Set 类型的属性值。
- map:等元素的子元素,指定 bean 的属性类型为 Map 的属性值。
- entry:
Proterties格式配置文件
Properties 配置文件主要以 key=value 键值对的形式存在,只能赋值,不能进行其他操作,适用于简单的属性配置。
使用流程
使用Properties配置文件的操作流程:
-
在Spring的XML配置文件中开启context命名空间
-
加载properties配置文件
-
在XML格式的配置文件中引入properties配置文件中的值:
${key}替换 XML文件中的属性值
案例展示
# jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
jdbc.username=root
jdbc.password=root
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 管理DruidDataSource对象-->
<context:property-placeholder location="jdbc.properties"
system-properties-mode="NEVER"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
</beans>
注意事项
<context:property-placeholder/>标签会优先加载系统的环境变量,然后再加载properties配置文件中的键值对;当配置文件中的某键值对的键和系统的环境变量重名时,会将系统中的环境变量传给XML配置文件;解决办法如下:
<!-- 自动优先加载系统的环境变量-->
<context:property-placeholder location="jdbc.properties"/>
<!-- 不加载系统的环境变量 -->
<context:property-placeholder location="jdbc.properties"
system-properties-mode="NEVER"/>
<!-- 不加载环境变量,从当前项目的根路径开始查询、加载所有的properties配置文件 -->
<context:property-placeholder location="classpath:*.properties"
system-properties-mode="NEVER"/>
<!-- 不加载环境变量,不仅加载当前项目中所有的properties配置文件,还加载当前项目所依赖的所有jar包中的 properties 配置文件 -->
<context:property-placeholder location="classpath*:*.properties"
system-properties-mode="NEVER"/>