失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > spring核心配置文件引入外部properties文件和另外的xml配置文件

spring核心配置文件引入外部properties文件和另外的xml配置文件

时间:2023-12-13 22:49:00

相关推荐

spring核心配置文件引入外部properties文件和另外的xml配置文件

spring核心配置文件引入外部properties文件和另外的xml配置文件

为什么要引入外部文件

我们使用jdbc的时候,会创建一个jdbc.properties配置文件,如果我需要在spring的IOC中存入连接池对象呢?

是不是需要给链接对象的属性url username password driver ,我们应该如何在spring的配置文件中引入外部文件呢?

引入properties文件

⚫ Spring提供了读取外部properties文件的机制,使用读取到的数据为bean的属性赋值

⚫ 操作步骤

准备外部properties文件开启context命名空间支持

xmlns:context=“/schema/context”加载指定的properties文件

< context:property-placeholder location=“classpath:filename.properties”>使用加载的数据

< property name=“propertyName” value="propertiesName"/>⚫注意:如果需要加载所有的properties文件,可以使用∗.properties表示加载所有的properties文件⚫注意:读取数据使用{propertiesName}"/> ⚫ 注意:如果需要加载所有的properties文件,可以使用*.properties表示加载所有的properties文件 ⚫ 注意:读取数据使用propertiesName"/>⚫注意:如果需要加载所有的properties文件,可以使用∗.properties表示加载所有的properties文件⚫注意:读取数据使用{propertiesName}格式进行,其中propertiesName指properties文件中的属性名

代码演示

实体类准备

我使用一个User类,有两个属性,我这个两个属性的值,从properties配置文件中读取值,通过IOC 的DI依耐注入值

package com.fs.demo;public class User {private String username;private String password;// set方法让spring可以DI依耐注入属性public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}}

properties配置文件

username=xiaofu

password=1234

**注意:**配置文件中username前面要加个前缀,不然赋值的时候会把你当前计算机的用户名取出来,而不是从properties中读取的,原因是因为计算机的环境变量中有个值也是username,而spring启动的时候会读取环境变量中的值,从而导致和properties中的值冲突

user.username=xiaofuuser.password=1234

applicationContext.xml核心配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><!-- 加载context命名空间xmlns:context="/schema/context"/schema/context/schema/context/spring-context.xsd--><!-- 引入外部properties文件properties中的key不要和本机的环境变量中的值冲突,因为spring在加载的时候获取计算机的环境变量中的值若与环境中的值冲突,读取出来的值就是计算机环境变量中设置的值所以,我们配置jdbc的时候一般就是jdbc.username.不会直接username注意:若要导入多个properties,需要在主配置文件中配置,classpath:*.properties<context:property-placeholder location="classpath:*.properties"/>--><context:property-placeholder location="classpath:data.properties"/><!-- 把user交给ioc管理--><bean id="user" class="com.fs.demo.User"><!--${properties中的key名} --><property name="username" value="${user.username}"/><property name="password" value="${user.password}"/></bean></beans>

测试代码

@Testpublic void testProperties(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");User user = (User) applicationContext.getBean("user");System.out.println(user);/*properties配置信息username=xiaofupassword=1234User{username='93422', password='1234'}若输出结果不为properties中配置的值,这个值是我的电脑用户名,因为spring在启动的时候会读取计算机的环境变量,环境变量中会有这个username所以拿到的值是你环境变量中配置的值,而不是你properties中设置的值所以,我们在写properties的key的时候,一般会jdbc.username,以免和系统的环境变量中的username冲突,导致取出的值不是properties中的值*//*properties配置信息是这样的就会正常读取到值user.username=xiaofuuser.password=1234//打印输出User{username='xiaofu', password='1234'}*/}

控制台运行结果

spring核心配置文件中导入其他的.xml配置文件

团队开发

⚫ 名称:import

⚫ 类型:标签

⚫ 归属:beans标签

⚫ 作用:在当前配置文件中导入其他配置文件中的项

⚫ 格式:

< beans>

< import />

< /beans>

⚫ 基本属性:

< import resource=“config.xml"/>

◆ resource:加载的配置文件名

⚫ Spring容器加载多个配置文件

new ClassPathXmlApplicationContext(“config1.xml”,“config2.xml”);

⚫ Spring容器中的bean定义冲突问题

◆ 同id的bean,后定义的覆盖先定义的

◆ 导入配置文件可以理解为将导入的配置文件复制粘贴到对应位置

◆ 导入配置文件的顺序与位置不同可能会导致最终程序运行结果不同

代码演示

实体类

创建一个类,这个类有个实体类属性,一个set方法,用于DI依耐注入

package com.fs.demo;public class Demo {private TestDemo testDemo;public void setTestDemo(TestDemo testDemo) {this.testDemo = testDemo;}@Overridepublic String toString() {return "Demo{" +"testDemo=" + testDemo +'}';}}

创建一个类,这个类是上一个类的属性

package com.fs.demo;public class TestDemo {public void testDemo(){System.out.println("TestDemo测试语句输出");}}

applicationContext.xml配置文件

applicationContext.xml主配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><!-- 引入外部的spring的配置文件--><import resource="classpath:applicationContext02.xml"/><bean id="demo" class="com.fs.demo.Demo"><!-- 这里就体现了引入外部的applicationContext02.xml文件,因为ref="testDemo这就是在applicationContext02配置的--><property name="testDemo" ref="testDemo"/></bean></beans>

applicationContext02.xml其他的.xml配置文件,在主配置文件中被引入了的

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd"><!-- 把test交给springIOC管理--><bean id="testDemo" class="com.fs.demo.TestDemo"/></beans>

测试代码

//测试引入其他的配置文件@Testpublic void testDemo(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//在主配置文件中获取出daoDemo demo = (Demo) applicationContext.getBean("demo");//Demo{testDemo=com.fs.demo.TestDemo@544a2ea6}因为在applicationContext02.xml中吧testDemo交给IOC管理了,所以demo中的set注入成功System.out.println(demo);}

控制台运行效果

如果觉得《spring核心配置文件引入外部properties文件和另外的xml配置文件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。