zoukankan      html  css  js  c++  java
  • Web项目中获取SpringBean——在非Spring组件中获取SpringBean

    最近在做项目的时候我发现一个问题:Spring的IOC容器不能在Web中被引用(或者说不能被任意地引用)。我们在配置文件中让Spring自 动装配,但并没有留住ApplicationContext的实例。我们如果希望在我们的项目中任何位置都能拿到同一个 ApplicationContext来获取IOC容器中的资源,就要让Spring将上下文环境填充到我们能获取的地方,比如下面的做法(来自网络资 源):

      自定义一个工具类,实现自ApplicationContextAware接口,接口的方法是setApplicationContext,我 们实现它,并让其为我们服务,因为Spring在load自己的时候会将上下文环境填充进来。我们所要做的就是将得到的 ApplicationContext保存下来用。

    package reyo.sdk.utils.spring;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    /**
     * Spring IOC上下文工具类
     *
     * @author reyo
     *
     */
    public class SpringUtil implements ApplicationContextAware {
    
        /**
         * 当前IOC
         */
        private static ApplicationContext applicationContext;
    
        /**
         * 设置当前上下文环境,此方法由spring自动装配
         */
        @Override
        public void setApplicationContext(ApplicationContext arg0)
                throws BeansException {
            applicationContext = arg0;
        }
    
        /**
         * 从当前IOC获取bean
         *
         * @param id
         *            bean的id
         * @return
         */
        public static Object getObject(String id) {
            Object object = null;
            object = applicationContext.getBean(id);
            return object;
        }
    
    }

      上文的类就是我们要用的,而其中的setApplicationContext是接口中需要实现的,Spring会自动进行填充。我们在Spring的配置文件中注册一下:

    1 <bean id="springUtil" class="reyo.sdk.utils.spring.SpringUtil" />

      这样就可以了,Spring把我们需要的东西给我们了。

      我们就可以在需要的地方这样做:

    1 YouClass obj = (YouClass)SpringUtil.getObject("beanid");

      当然,前提是你需要让Spring自动装配哦。

  • 相关阅读:
    Delphi通过调用COM对象实现更改桌面壁纸
    Delphi之TDrawGrid绘制
    Delphi中的消息截获(六种方法:Hook,SubClass,Override WndProc,Message Handler,RTTI,Form1.WindowProc:=@myfun)good
    从一般管理原则看微软的重组
    Delphi使用Windows API函数AnimateWindow实现窗体特效
    Delphi下URL汉字编码解码的两个函数
    Delphi2007下CIS的clHttp使用
    Delphi使用XmlHttp获取时间
    提升进程权限为DEBUG权限
    VS 2012 单元测试简单配置
  • 原文地址:https://www.cnblogs.com/interdrp/p/3524640.html
Copyright © 2011-2022 走看看