技术帮
 

ApplicationContext和WebApplicationContext

本网站内容基本都是原创作品,未得到作者同意也欢迎转载
转载请注明出处:技术帮
说你呢,赶紧长按二维码,然后点击识别图中二维码

任何技术难题可进QQ群提问:【小崔说编程
对于提问的原则是:没有你不能问的,只有我不会答的

1472955908895017376.png说两句


ApplicationContext是Spring的核心,Spring其实提供了一个大箱子,所有的Bean被创建出来后,都放入这个箱子中,需要的时候就从箱子里面取出一个来用。笔者经常形容Spring在这个箱子中创造了一个世界,这个世界中各种Bean相互依存,同呼吸共命运,共同完成开发者赋予它们的使命。

在Web开发中,使用的就是WebApplicationContext了,这是Spring在Web下的容器,这个类是继承自ApplicationContext的。

程序员在开发的时候不需要关心底层的东西,直接是需要注入就直接将bean注入到自己的类中使用,其实在这个时候调用了ApplicationContext的getBean方法,也就是将bean从容器中取出的过程。

stock_view_details_24px_519332_easyicon.net.png 创造手段

在Web开发的时候,通过在在web.xml文件中增加的配置创建的ApplicationContext。

     <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
     </listener>

stock_view_details_24px_519332_easyicon.net.png 从容器中还能得到什么?

基本来说,Spring管理的东西都是可以从ApplicationContext中获得的。

譬如下面的例子,就是读出SpringMVC管理下的所有的url地址的:

        List<String> lst = new ArrayList<String>();//存储所有url集合    
        WebApplicationContext wac = (WebApplicationContext) request.getAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE);//获取上下文对象  
        Map<String, HandlerMapping> requestMappings = BeanFactoryUtils.beansOfTypeIncludingAncestors(wac, HandlerMapping.class, true, false);  
        for(HandlerMapping handlerMapping : requestMappings.values()) {  
            if(handlerMapping instanceof RequestMappingHandlerMapping) {  
                RequestMappingHandlerMapping rmhm = (RequestMappingHandlerMapping) handlerMapping;  
                Map<RequestMappingInfo, HandlerMethod> handlerMethods = rmhm.getHandlerMethods();  
                for(RequestMappingInfo rmi : handlerMethods.keySet()) {  
                    PatternsRequestCondition prc = rmi.getPatternsCondition();  
                    Set<String> patterns = prc.getPatterns();  
                    for (String uStr : patterns)  
                        lst.add(uStr);  
                }  
            }  
        }


其他的功能留待以后慢慢摸索吧。