Spring中资源文件

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);
      }
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值