今天使用Spring引用外部属性文件时,发现引用不了?
Spring 引用外部属性文件_bean配置_怎么指定文件路径
我写的测试
1、一个使用外部属性文件的应用类
package com.exec.Ioc.T5;
//应用类,定义了引用URL和端口号
public class Application {
private String url;
private String port;
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
2、引用文件test.properties
放置位置和内容内容(引用的内容要是键值对形式)
我放在包内
内容:
url = http://127.0.0.1
port = 5901
3、配置xml
文件:
<!-- 方式一 -->
<bean id="data" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="locations">
<list>
<!-- 包内文件指定层级结构的路径,resources文件下的文件直接写文件名称加后缀 -->
<value>classpath:com/exec/Ioc/T5/test.properties</value>
</list>
</property>
</bean>
<!-- 方式二:单个文件可使用这种方式 -->
<!-- <context:property-placeholder location="classpath:com/exec/Ioc/T5/test.properties"/> -->
<bean id="application_bean" class="com.exec.Ioc.T5.Application">
<property name="port" value="${port}"></property>
<property name="url" value="${url}"></property>
</bean>
方式一:
首先需要 class 引入org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer
这个配置类,并且这种方式可以引入多个文件,使用locations
配置list
集合的值,指向多个文件路径;
其次我的配置文件放在com.exec.Ioc.T5/test.properties
包内,但是在路径中却不能这么写,因为在文件解析后实际的文件路劲会把.
间的连接变成文件的层级结构,那么文件路径应为com/exec/Ioc/T5/test.properties
方式二:
这中方式小巧便捷,<context:property-placeholder>
标签会实现对类的引用,不需要我们手动写了,但是只能用于映入单个文件,并且两种方式不可一起起作用,这种方式实际上也是使用了方式一。
4、调用main
方法测试:
package com.exec.Ioc.T5;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test_Main {
//main方法测试
public static void main(String[] args) {
@SuppressWarnings("resource")
ApplicationContext apc=new ClassPathXmlApplicationContext("T5.xml");
Application app=apc.getBean("application_bean",Application.class);
System.out.println("URL:"+app.getUrl());
System.out.println("Port:"+app.getPort());
}
}
运行结果: