Rrsource定义资源文件
常用的资源定义的实现类
a. ClassPathResource 从classpath中读取
b. FileSystemResource 从文件系统中读取
c. UrlResource 从指定URL中读取
d. ServletContextResource 必须要在web环境下使用
使用案例
package com.cloud.resource;
import java.io.IOException;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
public class ResourceTest {
/**
* ClassPathResource
* @throws IOException
*/
@Test
public void test1() throws IOException{
Resource resouce1 = new ClassPathResource("com/cloud/resource/a.txt");
//获取当前包路径下
Resource resouce2 = new ClassPathResource("a.txt",this.getClass());
System.out.println(resouce1.getFile().getAbsolutePath());
System.out.println(resouce2.getFile().getAbsolutePath());
}
/**
* FileSystemResource
* @throws IOException
*/
@Test
public void test2() throws IOException{
Resource resource1 = new FileSystemResource("f:/data.json");
System.out.println(resource1.exists());
System.out.println(resource1.getFile().getAbsolutePath());
}
/**
* UrlResource
* @throws Exception
*/
@Test
public void test3() throws Exception{
Resource resource1 = new UrlResource("http://www.baidu.com");
System.out.println(resource1.exists());
System.out.println(resource1.getFile().getAbsolutePath());
}
}
ApplicationContext定义资源文件
如果说BeanFactory是Spring的心脏,那么Application就是完整的身躯。ApplicationContext就是由BeanFactory派生出来的。
ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统加载文件。
使用案例
package com.cloud.resource;
import java.util.Arrays;
import java.util.Map;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.cloud.reply.UserDao;
public class ApplicationContextTest {
@Test
public void test1(){
ApplicationContext ac1 = new ClassPathXmlApplicationContext("com/cloud/resource/applicationContext.xml");
ApplicationContext ac2 = new ClassPathXmlApplicationContext("applicationContext.xml",this.getClass());
System.out.println(ac1.getBeanDefinitionCount());
System.out.println(Arrays.toString(ac1.getBeanDefinitionNames()));
System.out.println(ac2.getBeanDefinitionCount());
System.out.println(Arrays.toString(ac2.getBeanDefinitionNames()));
}
/**
* 一次加载多个配置文件
* @throws Exception
*/
@Test
public void test2() throws Exception{
//这里文件的加载不考虑先后顺序,会自动处理文件的依赖关系
ApplicationContext ac1=new ClassPathXmlApplicationContext(new String[]{
"com/cloud/day5/applicationContext_dao.xml",
"com/cloud/day5/applicationContext_service.xml"
});
System.out.println(Arrays.toString(ac1.getBeanDefinitionNames()));
ApplicationContext ac2=new ClassPathXmlApplicationContext(new String[]{
"applicationContext_dao.xml","applicationContext_service.xml"
},this.getClass());
System.out.println(Arrays.toString(ac2.getBeanDefinitionNames()));
}
@Test
public void testMrthod() throws Exception{
ApplicationContext ac=new ClassPathXmlApplicationContext(
"applicationContext_dao.xml",getClass());
//获取指定类型的bean的名称
String names[]=ac.getBeanNamesForType(UserDao.class);
System.out.println(Arrays.toString(names));
//获取指定类型的bean的信息,(key是名称,value是对象实例)
Map<String, UserDao> map=ac.getBeansOfType(UserDao.class);
System.out.println(map);
}
}
外部文件的引入
编写jdbc.properties
jdbcUrl=jdbc:mysql:///qianxun
driverClass=com.mysql.jdbc.Driver
username=root
password=root
UserDao.java文件
public interface UserDao {
void printInfo();
}
UserDaoImp.java文件
package com.cloud.demo4;
public class UserDaoImp implements UserDao{
private String jdbcUrl;
private String driverClass;
private String username;
private String password;
public void printInfo(){
System.out.println("jdbcUrl = "+jdbcUrl);
System.out.println("driverClass="+driverClass);
System.out.println("username="+username);
System.out.println("password="+password);
}
public String getJdbcUrl() {
return jdbcUrl;
}
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
public String getDriverClass() {
return driverClass;
}
public void setDriverClass(String driverClass) {
this.driverClass = driverClass;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
配置文件
<!-- 引入外部属性文件 :方式一
如果需要加载多个属性文件,就在最后加上文件名,使用逗号隔开
-->
<context:property-placeholder location="classpath:com/cloud/demo4/jdbc.properties"/>
<!-- 引入外部文件:方式二
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<list>
<value>classpath:com/cloud/demo4/jdbc.properties</value>
</list>
</property>
</bean>
-->
<!-- 配置UserDao对象 ,注入配置信息-->
<bean id="userDao" class="com.cloud.demo4.UserDaoImp">
<property name="jdbcUrl" value="${jdbcUrl}"/>
<property name="driverClass" value="${driverClass}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
测试文件
package com.cloud.demo4;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainTest {
@Test
public void test1() throws Exception {
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml",getClass());
UserDao userDao=(UserDao) ac.getBean("userDao");
/**
* 这里如果注释掉#username=root,系统就会自动寻找其他地方配置的username
* 也可以自行设置缺少的属性
* System.setProperty("username", "Spring");
*/
userDao.printInfo();
System.out.println("搜索系统中的Properties文件配置的属性///");
for(Object key:System.getProperties().keySet()){
Object value=System.getProperty((String)key);
System.out.println(key+"\t=\t"+value);
}
}
}