spring 初始化ApplicationContext的几种方式

最近做项目需要用到getBean(),在网上搜索之后发现有很多种方式获取ApplicationContext,做了些许尝试,解决了我的问题,决定把搜到的东西进行汇总,供大家学习。

方法一:FileSystemXmlApplicationContext

[java]  view plain  copy
  1. //1.默认为项目工作路径 即项目的根目录   
  2. ApplicationContext appCt2 = new FileSystemXmlApplicationContext("src/main/resources/app.spring.xml");   
  3. appCt2.getBean("beanId");  
[java]  view plain  copy
  1. //2.前缀classpath:表示的是项目的classpath下相对路径   
  2. ApplicationContext appCt2 = new FileSystemXmlApplicationContext("classpath:app.spring.xml");   
  3. appCt2.getBean("beanId");  
[java]  view plain  copy
  1. //3.使用前缀file 表示的是文件的绝对路径   
  2.    ApplicationContext appCt2 = new FileSystemXmlApplicationContext("file:D:/app.spring.xml");   
  3.    ApplicationContext appCt2 = new FileSystemXmlApplicationContext("D:/app.spring.xml");   
  4.    appCt2.getBean("beanId");  
[java]  view plain  copy
  1. //4.可以同时加载多个文件   
  2.   String[] xmlCfg = new String[] { "src/main/resources/base.spring.xml","classpath:app.spring.xml"};   
  3.   ApplicationContext appCt2 = new FileSystemXmlApplicationContext(xmlCfg);   
  4.   appCt2.getBean("beanId");  
[java]  view plain  copy
  1. //5.使用通配符加载所有符合要求的文件   
  2.   ApplicationContext appCt2 = new FileSystemXmlApplicationContext("classpath:*.spring.xml");   
  3.   appCt2.getBean("beanId");  
[java]  view plain  copy
  1. //6.Resource   
  2. ResourcePatternResolver     resolver=new PathmatchingResourceResolver();   
  3. Resource   res = resolver.getResource("classpath:com/hh/beans.xml");   
  4. Beanfactory    bf = new  XmlBeanFactory(res);   
  5. Car  car= bf.getBean("car",Car.class)   

这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。

方法二:通过Spring提供的工具类WebApplicationContextUtils获取ApplicationContext对象
[java]  view plain  copy
  1. import org.springframework.web.context.support.WebApplicationContextUtils;   
  2. ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc)  
  3. ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);  
  4. ac1.getBean("beanId");   
  5. ac2.getBean("beanId");  
这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。
这个类提供了方便的功能,这样你就不必去记 ServletContext 中属性的名字。 它的getWebApplicationContext() 方法在 WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 这个键值不对应任何对象的时候将返回 null。不过,为了避免在应用中得到 NullPointerExceptions ,我们推荐你使用 getRequiredWebApplicationContext() 方法。这个方法在ApplicationContext 缺失的时候会抛出一个异常。
上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。
方法三:ClassPathXmlApplicationContext (不推荐使用,比较费内存)
[java]  view plain  copy
  1. //1.没有前缀:默认为项目的classpath下相对路径   
  2.    ApplicationContext appCt = new ClassPathXmlApplicationContext("app.spring.xml");   
[java]  view plain  copy
  1. //2.前缀classpath:表示的是项目的classpath下相对路径   
  2.    ApplicationContext appCt = new ClassPathXmlApplicationContext("classpath:app.spring.xml");   
[java]  view plain  copy
  1. //3.使用前缀file 表示的是文件的绝对路径   
  2.    ApplicationContext appCt = new ClassPathXmlApplicationContext("file:D:/app.spring.xml");   
[java]  view plain  copy
  1. //4.可以同时加载多个文件   
  2.   String[] xmlCfg = new String[] { "classpath:base.spring.xml","app.spring.xml"};   
  3.   ApplicationContext appCt = new ClassPathXmlApplicationContext(xmlCfg);   
[java]  view plain  copy
  1. //5.使用通配符加载所有符合要求的文件   
  2.   ApplicationContext appCt = new ClassPathXmlApplicationContext("*.spring.xml");  
方法四:继承自抽象类ApplicationObjectSupport
抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。

方法五:继承自抽象类WebApplicationObjectSupport  
类似上面方法,调用getWebApplicationContext()获取WebApplicationContext 

方法六:实现接口ApplicationContextAware  (推荐使用)
SpringContextsUtil 实现了接口ApplicationContextAware,setApplicationContext(ApplicationContext applicationContext)这个方法。Spring初始化的时候就将ApplicationContext 装配好了,那么项目中就可以直接使用applicationContext.getBean("beanId");
[java]  view plain  copy
  1. @Service  
  2. public class SpringContextsUtil implements ApplicationContextAware{  
  3.   
  4. private static ApplicationContext applicationContext;    //Spring应用上下文环境     
  5.   /** 
  6.   * 实现ApplicationContextAware接口的回调方法,设置上下文环境   
  7.   * @param applicationContext 
  8.   * @throws BeansException 
  9.   */  
  10.   public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
  11.     SpringContextsUtil.applicationContext = applicationContext;  
  12.   }  
  13.   
  14.   /** 
  15.   * @return ApplicationContext 
  16.   */  
  17.   public static ApplicationContext getApplicationContext() {  
  18.     return applicationContext;  
  19.   }  
  20.   
  21.   /** 
  22.   * 获取对象   
  23.   * @param name 
  24.   * @return Object 一个以所给名字注册的bean的实例 
  25.   * @throws BeansException 
  26.   */  
  27.   public static Object getBean(String name) throws BeansException {  
  28.     return applicationContext.getBean(name);  
  29.   }  
  30.   
  31. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值