Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别

Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别

一、概述

在项目中遇到加载不到Spring配置文件,简单分析后,写此文备忘!

二、测试所需资源

TestBean.java

public class TestBean {
    public TestBean(){
        System.out.println(this.getClass().getName().concat(" init !"));
    }

    public String getTestStr() {
        return "testStr";
    }
}

applicationContext.xml

<bean id="testBean" class="com.bean.TestBean" />

二、区别

2.1 ClassPathXmlApplicationContext使用方法

ClassPathXmlApplicationContext 默认会去 classPath 路径下找。classPath 路径指的就是编译后的 classes 目录。

示例:

@Test
public void testBean(){
    //单配置文件方式一
    BeanFactory beanFactory=new ClassPathXmlApplicationContext("applicationContext.xml");

    //单配置文件方式二
    BeanFactory beanFactory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

    //多个配置文件
    BeanFactory beanFactory=new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});

    //绝对路径需加“file:”前缀
    BeanFactory beanFactory = new ClassPathXmlApplicationContext("file:E:\Workspace\idea_workspace\spring\springtest\src\main\resources\applicationContext.xml");

    TestBean bean= (TestBean) beanFactory.getBean("testBean");
    assertEquals("testStr",bean.getTestStr());
}

运行示例你会发现 “classpath:” 是可以缺省的。
如果是绝对路径,就需要加上 “file:” 前缀,不可缺省。

2.2 FileSystemXmlApplicationContext使用方法

FileSystemXmlApplicationContext 默认是去项目的路径下加载,可以是相对路径,也可以是绝对路径,若是绝对路径,“file:” 前缀可以缺省。

示例:

@Test
public void testBean(){
    //classes目录
    BeanFactory beanFactory=new FileSystemXmlApplicationContext("classpath:applicationContext.xml");

    //项目路径相对路径
    BeanFactory beanFactory=new FileSystemXmlApplicationContext("src\\main\\resources\\applicationContext.xml");

    //多配置文件
    BeanFactory beanFactory=new FileSystemXmlApplicationContext(new String[]{"src\\main\\resources\\applicationContext.xml"});

    //绝对目录
    BeanFactory beanFactory=new FileSystemXmlApplicationContext(new String[]{"E:\\Workspace\\idea_workspace\\spring\\springtest\\src\\main\\resources\\applicationContext.xml"});

    TestBean bean= (TestBean) beanFactory.getBean("testBean");
    assertEquals("testStr",bean.getTestStr());
}

原文地址:https://www.cnblogs.com/cristin/p/8722191.html

时间: 2024-10-10 14:21:05

Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别的相关文章

spring中ClassPathXmlApplication和FileSystemXmlApplicationContext使用区别

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");     DataSource ds = (DataSource) ac.getBean("ds");     System.out.println(ds); ClassPathXmlApplicationContext中的参数默然去classPath路径下找.可以加classpath:applic

【转载】Spring中DispatcherServlet与ContextLoaderListener的区别

昨天在写springmvc的时候,在web.xml中配置了DispatcherServlet,如下: <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>

Spring中Adivisor和Aspect的区别(自我理解)

在AOP中有几个概念: - 方/切 面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象.事务管理是J2EE应用中一个很好的横切关注点例子.方面用Spring的Advisor或拦截器实现. - 连接点/织入点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出. - 通知(Advice):在特定的连接点,AOP框架执行的动作.各种类型的通知包括"around"."before"和"throws"通知

Spring 中 ApplicationContext 和 BeanFactory 的区别,以及 Spring bean 作用域

//从ApplicationContext 中取 bean ApplicationContext ac = new ClassPathXmlApplicationContext ( "com/hsp/beans.xml" ) ; ac.getBean("beanId"); 当我们去实例化beans.xml,该文件中配置的 bean 就被实例化(不论你用还是不用,bean对象都在那),而且该对象是singleton单例的.(每个bean都有scope属性,可以人为的设

Spring中BeanFactory与FactoryBean的区别

在Spring中有BeanFactory和FactoryBean这2个接口,从名字来看很相似,比较容易搞混. 一.BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean().containsBean()等管理Bean的通用方法.Spring的容器都是它的具体实现如: DefaultListableBeanFactory XmlBeanFactory ApplicationContext 这些实现类又从

Spring中@Component和@Bean的区别

Spring 管理Bean的方式 Spring管理Bean分为两个部分,一个是注册Bean,一个装配Bean. 完成这两个动作有三种方式,一种是使用自动配置的方式.一种是使用JavaConfig的方式,一种就是使用XML配置的方式. @Component 把普通pojo实例化到spring容器中 @Bean 需要在配置类中使用,即类上需要加上@Configuration注解 两者都能通过@Autowired注解自动装配 @Compent和@Bean到底区别在哪? 在应用开发的过程中,如果想要将第

Spring中拦截/和拦截/*的区别 - 不能访问到返回的JSP - 访问静态资源(jpg,js等)

一.我们都知道在基于Spring的Application中,需要在web.xml中增加下面类似的配置信息: Xml代码   <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!--   Spring MVC Servlet --> <servlet> <s

Spring中拦截/和拦截/*的区别

在基于Spring MVC的Application中,需要在web.xml中增加下面类似的配置信息: <!-- Spring MVC Servlet --> <servlet> <servlet-name>servletName</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <lo

Spring中BeanFactory和ApplicationContext的区别

我用一个例子去测试BeanFactory和ApplicationContext的区别 首先建立一个bean public class User {//声明无参构造,打印一句话,监测对象创建时机 public User(){ System.out.println("User对象初始化"); } } 然后再建立测试类 public class UserTest { @Test public void ApplicationContexttest(){ ApplicationContext