FileSystemXmlApplicationContext…

   Spring有两个核心接口:BeanFactory 和 ApplicationContext,其中ApplicationContext是BeanFactory 的子接口。它们代表Spring容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean,Bean是Spring管理的基本单位,在基于spring的javaEE应用中,所有的组件都被当成bean来处理

   很多时候, ApplicationContext 都是以声明式方式操作容器,无须手动创建。例如:可利用像ContextLoader 的支持类,在 Web 应用启动时自动创建 ApplicationContext。当然,也可以采用编程方式创建 ApplicationContext。

Spring中ApplicationContext的三种不同实现:

1)FileSystemXmlApplicationContext:这种方式是通过程序在初始化的时候,导入Bean配置文件,然后得到Bean实例。

ApplicationContext ctx newFileSystemXmlApplicationContext("spring-config.xml"); //当前路径加载单个配置文件

String[] locations {"bean1.xml", "bean2.xml", "bean3.xml"};

ApplicationContext ctx new FileSystemXmlApplicationContext(locations ); //同时加载多个配置文件

ApplicationContext ctx new FileSystemXmlApplicationContext("D:/project/bean.xml");//根据具体路径加载文件

对于FileSystemXmlApplicationContext:

默认表示的是两种:

1.没有盘符的是项目工作路径,即项目的根目录;

2.有盘符表示的是文件绝对路径.

注意:如果要使用classpath路径,需要前缀classpath:

2ClassPathXmlApplicationContext

ApplicationContext ctx new ClassPathXmlApplicationContext("bean.xml");//加载单个配置文件

String[] locations {"bean1.xml", "bean2.xml", "bean3.xml"};

ApplicationContext ctx newClassPathXmlApplication(locations);//同时加载多个配置文件。

或者用通配符同时加载多个配置文件:

ApplicationContext ac new ClassPathXmlApplicationContext("classpath:/*.xml");

注:其中FileSystemXmlApplicationContext和ClassPathXmlApplicationContext与BeanFactory的xml文件定位方式一样是基于路径的。

ClassPathXmlApplicationContextFileSystemXmlApplicationContext的区别如下:

1.classpath:前缀是不需要的,默认就是指项目的classpath路径下面;

2.如果要使用绝对路径,需要加上file:前缀表示这是绝对路径;

3)XmlWebApplicationContext在B/S系统中,通常在web.xml初始化bean的配置文件,然后由WebAppliCationContextUtil得到ApplicationContext

ServletContext servletContext =request.getSession().getServletContext();

ApplicationContext ctx WebApplicationContextUtils.getWebApplicationContext(servletContext);

例子如下:

       public static void main(String[] args) {

              ApplicationContext factory null;

              // classpath路径,用ClassPathXmlApplicationContext类时,有没有classpath:前缀都是一样的。

              factory new ClassPathXmlApplicationContext("classpath:appcontext.xml");

              factory new ClassPathXmlApplicationContext("appcontext.xml");

              // ClassPathXmlApplicationContext使用了file前缀是可以使用绝对路径的。

              factory new ClassPathXmlApplicationContext(

                            "file:F:/workspace/example/src/appcontext.xml");

              // 用文件系统的路径,默认指项目的根路径

              factory new FileSystemXmlApplicationContext("src/appcontext.xml");

              factory new FileSystemXmlApplicationContext(

                            "webRoot/WEB-INF/appcontext.xml");

 

              // 使用了classpath:前缀,这样,FileSystemXmlApplicationContext也能够读取classpath下的相对路径

              factory new FileSystemXmlApplicationContext(

                            "classpath:appcontext.xml");

              // 加不加file前缀都是一样的。

              factory new FileSystemXmlApplicationContext("file:F:/workspace/example/src/appcontext.xml");

              factory new FileSystemXmlApplicationContext(

                            "F:/workspace/example/src/appcontext.xml");

              HelloClient hw (HelloClient) factory.getBean("helloworldbean");

  }

 

三个实现类的区别:

FileSystemXmlApplicationContext:通过程序在初始化的时候,导入Bean配置文件,然后得到Bean实例。

XmlWebApplicationContext在B/S系统中,通常在web.xml初始化bean的配置文件,然后由WebAppliCationContextUtil得到ApplicationContext例如:
ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ctx =????  WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
其中 servletContext sc 可以具体 换成 servlet.getServletContext()或者 this.getServletContext() 或者 request.getSession().getServletContext();
另外,由于spring是注入的对象放在ServletContext中的,所以可以直接在ServletContext取出WebApplicationContext 对象:

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值