spring容器之ApplicationContext

一、ApplicationContext:是spring继BeanFactory之外的另一个核心接口或容器,允许容器通过应用程序上下文环境创建、获取、管理bean。为应用程序提供配置的中央接口。在应用程序运行时这是只读的,但如果实现支持这一点,则可以重新加载。

一个ApplicationContext提供:

•访问应用程序组件的Bean工厂方法。从org.springframework.beans.factory.ListableBeanFactory继承。

•以通用方式加载文件资源的能力。继承自org.springframe .core.io。ResourceLoader接口。---beanXML

•向注册侦听器发布事件的能力。继承自ApplicationEventPublisher接口。

•解析消息的能力,支持国际化。继承自MessageSource接口。

•从父上下文继承。后代上下文中的定义总是优先级。例如,这意味着单个父上下文可以被整个web应用程序使用,而每个servlet都有自己独立于任何其他servlet的子上下文。

其接口主要子类(接口)包括:ConfigurableApplicationContext、WebApplicationContext

 

 

 

ConfigurableApplicationContext:该接口提供了根据配置创建、获取bean的一些方法,其中主要常用的实现包括:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext等。提供了通过各种途径去加载实例化bean的手段。

 

 

 

AnnotationConfigWebApplicationContext:WebApplicationContext实现,它接受带注释的类作为输入—特别是@Configuration-annotated类,但也接受普通的@Component类和使用javax兼容JSR-330的类。注入注解。允许逐个注册类(指定类名作为配置位置)以及类路径扫描(指定基本包作为配置位置)。对于多个@Configuration类,后面的@Bean定义将覆盖前面加载的文件中定义的类。可以利用这一点,通过额外的配置类故意覆盖某些bean定义。提供了注册注解类和扫描注解类等操作:

   public void register(Class<?>... annotatedClasses) {---注册一个或多个要处理的带注释的类。
        Assert.notEmpty(annotatedClasses, "At least one annotated class must be specified");
        this.annotatedClasses.addAll(Arrays.asList(annotatedClasses));
    }

    public void scan(String... basePackages) {---在指定的包中扫描类
        Assert.notEmpty(basePackages, "At least one base package must be specified");
        this.basePackages.addAll(Arrays.asList(basePackages));
    }

 

核心方法:loadBeanDefinitions

 

 

 

XmlWebApplicationContext:WebApplicationContext实现,它从XML文档获取配置,默认情况下,配置将取自“/WEB-INF/applicationContext”。xml" for the root context, and "/WEB-INF/test-servlet。对于具有名称空间“test-servlet”的上下文(类似于对于具有servlet-name“test”的DispatcherServlet实例)。

ClassPathXmlApplicationContext:独立的XML应用程序上下文,从类路径中获取上下文定义文件,将普通路径解释为包含包路径的类路径资源名(例如,“mypackage / myresource.txt”)。适用于测试工具以及嵌入在jar中的应用程序上下文。配置位置的默认值可以通过getConfigLocations重写,配置位置可以表示具体的文件,比如“/myfiles/context”。xml“或ant样式的模式,比如”/myfiles/*-context。参见org.springframework.util。模式细节的AntPathMatcher javadoc)。注意:对于多个配置位置,后面的bean定义将覆盖前面加载的文件中定义的配置位置。可以利用这一点,通过额外的XML文件故意覆盖某些bean定义。提供了诸多加载xml的操作:

 

 

 

FileSystemXmlApplicationContext:

独立的XML应用程序上下文,从文件系统或url获取上下文定义文件,将普通路径解释为相对的文件系统位置(例如,“mydir / myfile.txt”)。适用于测试线束以及独立环境。注意:普通路径总是被解释为相对于当前VM工作目录,即使它们以斜杠开头。(这与Servlet容器中的语义一致。)使用显式的“file:”前缀强制执行绝对文件路径。配置位置的默认值可以通过getConfigLocations重写,配置位置可以表示具体的文件,比如“/myfiles/context”。xml“或ant样式的模式,比如”/myfiles/*-context。参见org.springframework.util。模式细节的AntPathMatcher javadoc)。注意:对于多个配置位置,后面的bean定义将覆盖前面加载的文件中定义的配置位置。可以利用这一点,通过额外的XML文件故意覆盖某些bean定义。这是一个简单的一站式应用程序上下文。考虑将GenericApplicationContext类与org.springframework.bean .factory.xml结合使用。用于更灵活的上下文

 

 

 

ClassPathXmlApplicationContext FileSystemXmlApplicationContext :一个是从类路径获取配置文件并进一步实例化bean,一个是从文件系统或url加载文件并进一步实例化bean。

ApplicationContext提供:

•访问应用程序组件的Bean工厂方法。从org.springframework.beans.factory.ListableBeanFactory继承。

•以通用方式加载文件资源的能力。继承自org.springframe .core.io。ResourceLoader接口。

•向注册侦听器发布事件的能力。继承自ApplicationEventPublisher接口。

•解析消息的能力,支持国际化。继承自MessageSource接口。

•从父上下文继承。后代上下文中的定义总是优先级。例如,这意味着单个父上下文可以被整个web应

posted @ 2022-02-19 20:57  你的雷哥  阅读(378)  评论(0编辑  收藏  举报