1. 创建新的命名空间
将
xmlns="http://www.springframework.org/schema/beans"
复制修改为xmlns:context="http://www.springframework.org/schema/context"
再添加进去
表示开辟一个新的命名空间,叫做context
在
xsi:schemaLocation=
中,将前面两个路径复制,将beans修改为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
">
这样就可以使用一个全新的命名空间context
2. 加载properties文件
<!-- 1.开启context命名空间 -->
<!-- 2.使用context空间加载properties文件 -->
<context:property-placeholder location="jdbc.properties"/>
<!-- 3.使用属性占位符${}读取properties文件中的属性 -->
<bean 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>
3. 一些问题
3.1 问题一
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<property name="name" value="${username}"/>
</bean>
并且properties文件中
username=root666
我们这边打印一下输出
public class BookDaoImpl implements BookDao {
private String name;
public void setName(String name) {
this.name = name;
}
public void save() {
System.out.println("book dao save ..." + name);
}
}
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
}
}
但是控制台的输出username并不是root666
原因是系统环境变量和该环境变量中username冲突了,而系统环境变量的优先级更高所以输出的不是我们要的username
所以在加载properties文件时加上一个属性system-properties-mode="NEVER"
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
3.2 问题二
当出现了多个配置文件时
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
<context:property-placeholder location="jdbc.properties,jdbc2.properties" system-properties-mode="NEVER"/>
但是这种加载方式并不是最理想的
选择使用下面这种
<!--classpath*:*.properties : 设置加载当前工程类路径和当前工程所依赖的所有jar包中的所有properties文件-->
<context:property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER"/>