`
冽豹之姿
  • 浏览: 40382 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

资源获取总结(转)

阅读更多
资源获取总结:
Spring提供了很多 Resource 的实现,下面对以下四种进行总结:
ClassPathResource与FileSystemResource,ClassPathXmlApplicationContext与FileSystemXmlApplicationContextzhi。
以spring in actiong 中第一个例子为背景讨论:spring版的helloworld
程序清单1.1GreetingService接口,将实现与接口分离出来

package com.springinaction.chapter01.hello;    
   
public interface GreetingService {    
    public void sayGreeting();    
}   


程序清单1.2GreetingServiceImpl负责打印问候语

package com.springinaction.chapter01.hello;    
   
public class GreetingServiceImpl implements GreetingService {    
    private String greeting;        
        
    public GreetingServiceImpl() {}         
    /** 
      * @param greeting 
      */   
    public GreetingServiceImpl(String greeting) {       
        this.greeting = greeting;    
     }       
    public void sayGreeting() {    
         System.out.println(this.greeting);          
     }       
    public void setGreeting(String greeting) {    
        this.greeting = greeting;    
     }    
   
}   

package com.springinaction.chapter01.hello;

public class GreetingServiceImpl implements GreetingService {
 private String greeting; 
 
 public GreetingServiceImpl() {}  
 /**
  * @param greeting
  */
 public GreetingServiceImpl(String greeting) { 
  this.greeting = greeting;
 } 
 public void sayGreeting() {
  System.out.println(this.greeting);  
 } 
 public void setGreeting(String greeting) {
  this.greeting = greeting;
 }

}


程序清单1.3在spring中配置helloworld,路径在src下面:

<?xml version="1.0" encoding="UTF-8"?>    
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">    
   
<beans>        
     <bean id="greetingService"    
          class="com.springinaction.chapter01.hello.GreetingServiceImpl">    
           <property name="greeting">    
             <value>Hello world!</value>    
           </property>    
     </bean>    
</beans>   

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>    
    <bean id="greetingService" 
          class="com.springinaction.chapter01.hello.GreetingServiceImpl">
          <property name="greeting">
           <value>Hello world!</value>
          </property>
    </bean>
</beans>

程序清单1.4helloworld示例的主类

package com.springinaction.chapter01.hello;    
import org.springframework.beans.factory.BeanFactory;    
import org.springframework.beans.factory.xml.XmlBeanFactory;    
import org.springframework.core.io.Resource;    
import org.springframework.core.io.FileSystemResource;    
import org.springframework.core.io.ClassPathResource;    
import org.springframework.context.ApplicationContext;    
import org.springframework.context.support.FileSystemXmlApplicationContext;    
import org.springframework.context.support.ClassPathXmlApplicationContext;    
public class HelloApp {    
   
    /** 
      * @param args 
      */   
    public static void main(String[] args) throws Exception{    
    //代码分析,具体实现在后面    
      }    
   
}   

package com.springinaction.chapter01.hello;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloApp {

 /**
  * @param args
  */
 public static void main(String[] args) throws Exception{
 //代码分析,具体实现在后面
     }

}


具体实现一:ClassPathResource

Resource resource=new ClassPathResource("hello.xml");    
BeanFactory factory=new XmlBeanFactory(resource);    
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");    
greetingService.sayGreeting();   

Resource resource=new ClassPathResource("hello.xml");
BeanFactory factory=new XmlBeanFactory(resource);
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");
greetingService.sayGreeting();



说明:使用ClassPathResource,只能直接使用:hello.xml,而:
(1)不能用src/hello.xml,
(2)不能用classpath前缀,如classpath:hello.xml,或classpath:src/hello.xml
(3)不能用绝对路径。
具体实现二:FileSystemResource

//直接使用src/hello.xml,而不能使用classpath:前缀    
Resource resource=new FileSystemResource("src/hello.xml");    
//或使用绝对路径,但不能用file:前缀    
//Resource resource=new FileSystemResource("E:/Eclipse-JEE/mywork/SpringInAction/src/hello.xml");    
BeanFactory factory=new XmlBeanFactory(resource);    
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");    
greetingService.sayGreeting();   

//直接使用src/hello.xml,而不能使用classpath:前缀
Resource resource=new FileSystemResource("src/hello.xml");
//或使用绝对路径,但不能用file:前缀
//Resource resource=new FileSystemResource("E:/Eclipse-JEE/mywork/SpringInAction/src/hello.xml");
BeanFactory factory=new XmlBeanFactory(resource);
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");
greetingService.sayGreeting();


说明:使用FileSystemResource,
(1)使用:src/hello.xml,而不能使用classpath:前缀如
classpath:src/hello.xml,或classpath:hello.xml
(2)使用绝对路径,但不能用前缀file:
具体实现三:ClassPathXmlApplicationContext

//classpath:前缀可要可不要,不能用src/hello.xml,或classpath:src/hello.xml    
ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:hello.xml");//也可以为hello.xml    
//或使用绝对路径,需要加上 file: 前缀表示这是绝对路径;注意,一定要加上file:    
//ApplicationContext factory=new ClassPathXmlApplicationContext("file:E:/Eclipse-JEE/mywork/SpringInAction/src/hello.xml");          
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");    
greetingService.sayGreeting();   

//classpath:前缀可要可不要,不能用src/hello.xml,或classpath:src/hello.xml
ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:hello.xml");//也可以为hello.xml
//或使用绝对路径,需要加上 file: 前缀表示这是绝对路径;注意,一定要加上file:
//ApplicationContext factory=new ClassPathXmlApplicationContext("file:E:/Eclipse-JEE/mywork/SpringInAction/src/hello.xml");   
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");
greetingService.sayGreeting();



总结:使用ClassPathXmlApplicationContext:
(1)classpath: 前缀可要可不要的, 默认就是指项目的classpath路径下面;但是不能用src/hello.xml,或classpath:src/hello.xml
(2)如果要使用绝对路径,需要加上 file: 前缀表示这是绝对路径;注意,一定要加上file:
具体实现四:FileSystemXmlApplicationContext

//没有盘符的是项目工作路径,即项目的根目录;不能写hello.xml,要写src/hello.xml    
ApplicationContext factory=new FileSystemXmlApplicationContext("src/hello.xml");    
//文件绝对路径:file:前缀可要可不要    
//ApplicationContext factory=new FileSystemXmlApplicationContext("E:/Eclipse-JEE/mywork/SpringInAction/src/hello.xml");//也可加上file:    
//可以使用classpath路径, 需要前缀 classpath:但是如加上classpath則不能加上src/否则报错。    
//ApplicationContext factory=new FileSystemXmlApplicationContext("classpath:hello.xml");    
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");    
greetingService.sayGreeting();   

//没有盘符的是项目工作路径,即项目的根目录;不能写hello.xml,要写src/hello.xml
ApplicationContext factory=new FileSystemXmlApplicationContext("src/hello.xml");
//文件绝对路径:file:前缀可要可不要
//ApplicationContext factory=new FileSystemXmlApplicationContext("E:/Eclipse-JEE/mywork/SpringInAction/src/hello.xml");//也可加上file:
//可以使用classpath路径, 需要前缀 classpath:但是如加上classpath則不能加上src/否则报错。
//ApplicationContext factory=new FileSystemXmlApplicationContext("classpath:hello.xml");
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");
greetingService.sayGreeting();


总结:使用FileSystemXmlApplicationContext,默认表示的是两种:
(1)没有盘符的是项目工作路径,即项目的根目录;不能写hello.xml,要写src/hello.xml
(2)有盘符表示的是 文件绝对路径:file:前缀可要可不要
(3)如果要使用classpath路径,需要前缀classpath,但是加上classpath則不能加上src/否则报错。
       
//个人认为最简单的一种    
ApplicationContext factory=new ClassPathXmlApplicationContext("hello.xml");    
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");    
greetingService.sayGreeting(); 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics