• 手动获取spring的ApplicationContext和bean对象


    WEB项目:

    方法1:

    1
    ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc)

     方法2:

    1
    ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)

     方法3:

    1
    写一个工具类类继承ApplicationObjectSupport,并将这个加入到spring的容器

     方法4:

    1
    写一个工具类类继承WebApplicationObjectSupport,并将这个加入到spring的容器

     方法5:(推荐)

    1
    写一个工具类实现ApplicationContextAware接口,并将这个加入到spring的容器

     示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import java.util.Map;
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
     
    /**
     * 获取ApplicationContext和Object的工具类
     * @author yzl
     *
     */
    @SuppressWarnings({ "rawtypes""unchecked" })
    public class SpringContextUtils implements ApplicationContextAware {
        private static ApplicationContext applicationContext;
     
        public void setApplicationContext(ApplicationContext arg0)
                throws BeansException {
            applicationContext = arg0;
        }
     
        /**
         * 获取applicationContext对象
         * @return
         */
        public static ApplicationContext getApplicationContext(){
            return applicationContext;
        }
         
        /**
         * 根据bean的id来查找对象
         * @param id
         * @return
         */
        public static Object getBeanById(String id){
            return applicationContext.getBean(id);
        }
         
        /**
         * 根据bean的class来查找对象
         * @param c
         * @return
         */
        public static Object getBeanByClass(Class c){
            return applicationContext.getBean(c);
        }
         
        /**
         * 根据bean的class来查找所有的对象(包括子类)
         * @param c
         * @return
         */
        public static Map getBeansByClass(Class c){
            return applicationContext.getBeansOfType(c);
        }
    }

    非WEB项目

    1
    ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml")

    可选的操作方法有:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    一:
    String[]   path={"WebRoot/WEB-INF/applicationContext.xml","WebRoot/WEB-INF/applicationContext_task.xml"};
    ApplicationContext context = new FileSystemXmlApplicationContext(path);
     
    二:
    String path="WebRoot/WEB-INF/applicationContext*.xml";
    ApplicationContext context = new FileSystemXmlApplicationContext(path);
     
    三:
    ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:地址");
    没有classpath的话就是从当前的工作目录

     

    另外关于对于接口ApplicationContextAware的理解,可以参考转载的另一篇笔记,深入浅出写的不错:

    org.springframework.context.ApplicationContextAware使用理解

    转自:http://www.cnblogs.com/yangzhilong/p/3949332.html

  • 相关阅读:
    [CSP校内集训]hotel
    DP小技巧——悬线法
    [SDOI2015]寻宝游戏/异象石(LCA)
    [HAOI2006]旅行
    [SDOI2013]泉(搜索+hash+容斥)
    [NOIP校内集训]home
    [AHOI2014/JSOI2014]骑士游戏(SPFA的本质)
    欧拉函数模板
    开学考试题8:神奇的集合(multiset) 动态开点线段树
    开学考试题5:2017黑龙江省选
  • 原文地址:https://www.cnblogs.com/McCa/p/5920446.html
Copyright © 2020-2023  润新知