如何使用@ImportResource和@Value註解進行資源文件讀取
xml配置文件方式:
註解方式
例子:
config.properties
password=123456
url=127.0.0.1
# userName=root
jdbc.userName=root
config.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"
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">
<context:property-placeholder location="classpath:config.properties"/>
</beans>
spring-beanannotation.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"
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">
<!--property-placeholder 作用是加載資源文件,加載完後可以使用${keyStr}的方式進行-->
<!-- <context:property-placeholder location="classpath:config.properties"/>-->
<context:component-scan base-package="com.torey.beanannotation"/>
</beans>
package com.torey.beanannotation.javabased;
/**
* @ClassName:MyDriverManager
* @Description:
* @author: Torey
*/
public class MyDriverManager {
public MyDriverManager(String url,String userName,String passWord){
System.out.println("url=" + url + ";userName=" + userName + ";passWord=" + passWord);
}
}
package com.torey.beanannotation.javabased;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
/**
* @ClassName:StoreConfig
* @Description:
* @author: Torey
*/
@Configuration
@ImportResource("classpath:config.xml")
public class StoreConfig {
//userName打印的結果與config.properties配置的不一樣,是因爲userName取得是當前系統登錄用戶名稱
// @Value("${userName}")
@Value("${jdbc.userName}")
private String userName;
@Value("${password}")
private String password;
@Value("${url}")
private String url;
@Bean
public MyDriverManager myDriverManager(){
return new MyDriverManager(url,userName,password);
}
}
package com.torey.springtest.base;
import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils;
/**
* @ClassName:UnitTestBase
* @Description:
* @author: Torey
*/
public class UnitTestBase {
public UnitTestBase(){}
private String springXmlPath;
private ClassPathXmlApplicationContext applicationContext;
public UnitTestBase(String springXmlpath){
this.springXmlPath=springXmlpath;
}
@Before
public void before(){
if (StringUtils.isEmpty(springXmlPath)) {
springXmlPath="classpath*:spring-*.xml";
}
applicationContext= new ClassPathXmlApplicationContext(springXmlPath.split("[,\\s]"));
applicationContext.start();
}
@After
public void after(){
applicationContext.destroy();
}
public Object getBean(String beanId){
return applicationContext.getBean(beanId);
}
}
package com.torey.springtest.bean;
import com.torey.beanannotation.javabased.MyDriverManager;
import com.torey.springtest.base.UnitTestBase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
/**
* @ClassName:TestResources
* @Description:
* @author: Torey
*/
@RunWith(BlockJUnit4ClassRunner.class)
public class TestBeanAnnotation extends UnitTestBase {
public TestBeanAnnotation(){
super("classpath:spring-beanannotation.xml");
}
@Test
public void testMyDriveManage(){
MyDriverManager myDriverManager=(MyDriverManager) super.getBean("myDriverManager");
System.out.println(myDriverManager.getClass().getName());
}
}