在上一篇介绍了如何获取配置文件属性的两种方式,但是把所有的配置信息都写到application里,就会显的特别臃肿。
@PropertySource
Spring
框架提供了PropertySource
注解,目的是加载指定的属性
文件,也是为了实现隔离。
举个例子:
新建一个user.properties
testId = 001
testname = test
testword = 123
创建一个配置类TestOne
@Configuration
@PropertySource(value = "classpath:user.properties")
public class TestOne {
@Value("${testId}")
private String testId;
@Value("${testname}")
private String testname;
@Value("${testword}")
private String testword;
省略了getter,setter,tostring....
测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
TestOne testOne;
@Test
public void test01(){
System.out.println(testOne);
}
}
@ImportResource
使用@ImportResource引入Spring配置文件.xml
编写Spring配置文件.xml
<?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">
<bean id="Test" class="com.example.demo.domain.TestOne">
<property name="testId" value="001"></property>
<property name="testname" value="TheOne"></property>
</bean>
</beans>
bean文件还用刚刚的配置类
public class TestOne {
//@Value("${testId}")
private String testId;
//@Value("${testname}")
private String testname;
//@Value("${testword}")
private String testword;
省略getter,setter,tostring....
在启动类中使用@ImportResource引入xml资源
测试:
package com.example.demo;
import com.example.demo.domain.TestOne;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
@SpringBootTest
class DemoApplicationTests {
@Autowired
ApplicationContext ioc;
@Autowired
TestOne testOne;
@Test
public void test01(){
boolean b = ioc.containsBean("Test");
System.out.println(b);
System.out.println(testOne);
}
}
控制台打印结果: