Spring获取ApplicationContext

第一类:主动获取

1. FileSystemXmlApplicationContext

此方法根据配置文件的文件系统路径进行加载,它的起始路径是项目路径,所以可以直接这样写WebRoot/WEB-INF,如果前边加了file:则说明后边的路径就要写全路径了,就是绝对路径。例如:

ApplicationContext context = new FileSystemXmlApplicationContext("D:/dev/applicationcontext.xml");

这种采用绝对路径加载的方式,灵活性很差,特别是win和linux等系统的文件系统不一样,如果跨系统部署会增加复杂度。

2. ClassPathXmlApplicationContext

此方法是根据相对路径加载配置文件。即从classpath下加载,也就是默认跟路径为WEB-INF/classes,并不是项目的根路径。例如:

ApplicationContext context = new ClassPathXmlApplicationContext("/applicationcontext.xml");
3. XmlWebApplicationContext

这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。

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

以上三种方式在web项目中不推荐,因为在web项目中,系统一旦启动,web服务器会初始化Spring的上下文的,如果用上述方法相当于又进行了一次初始化,这样子做会非常耗时。推荐使用第二类方式。

第二类:自动注入

Spring 提供两种方式,一种方式实现ApplicationContextAware接口,另种办法继承ApplicationObjectSupport。

1. 实现ApplicationContextAware接口
@Component
public class SpringContextUtil implements ApplicationContextAware {

     private static ApplicationContext applicationContext;

     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
           SpringContextUtil.applicationContext = applicationContext;
     }

     public static ApplicationContext getApplicationContext() {
            return applicationContext;
     }

      @SuppressWarnings("unchecked")
      public static <T> T getBean(String name) throws BeansException {
                 return (T) applicationContext.getBean(name);
       }
}

注意:这个地方使用了Spring的注解@Component,如果不是使用annotation的方式,而是使用xml的方式管理Bean,记得写入配置文件

<bean id="springContextUtil" class="com.***.utils.SpringContextUtil" />
2. 继承ApplicationObjectSupport类

该抽象类提供getApplicationContext()方法,可以方便的获取到ApplicationContext。Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContextcontext)方法将ApplicationContext 对象注入。

@Service
public class SpringContextHelper2 extends ApplicationObjectSupport { 

    //提供一个接口,获取容器中的Bean实例,根据名称获取
    public Object getBean(String beanName)
    {
        return getApplicationContext().getBean(beanName);
    }
}

转载于:https://my.oschina.net/u/2250363/blog/666853

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值