Application

1.AbstractRefreshableApplicationContext

AnnotationConfigWebApplicationContext

WebApplicationContext实现,它接受组件类作为输入——特别是@ configuration注释的类,但也接受普通的@Component类和使用javax兼容JSR-330的类。注入注解。
允许一个一个地注册类(指定类名作为配置位置)以及类路径扫描(指定基本包作为配置位置)。

这本质上相当于web环境中的AnnotationConfigApplicationContext。

要使用这个应用程序上下文,必须将contextClass的context-param设置为这个类的完全限定名。

在Spring 3.1中,当使用基于WebApplicationInitializer代码替代web.xml时,这个类也可以直接实例化并注入到Spring的DispatcherServlet或ContextLoaderListener中。有关详细信息和使用示例,请参阅它的Javadoc。

与XmlWebApplicationContext不同的是,没有假设默认的配置类位置。相反,需要为ContextLoader设置“contextConfigLocation”上下文参数和/或为FrameworkServlet设置“contextConfigLocation”的init-参数。辅助值可以包含完全限定的类名和用于扫描组件的基包。参见loadBeanDefinitions(org.springframework.beans.factory.support.DefaultListableBeanFactory)了解如何处理这些位置的确切细节。

作为设置“contextConfigLocation”参数的另一种方法,用户可以实现一个applicationcontextinitializerclasses并设置“contextInitializerClasses”上下文参数/ init参数。在这种情况下,用户应该偏爱AbstractApplicationContext.refresh()和scan(String…)方法,而不是abstractrefrembleconfigapplicationcontext . setconfiglocation (String)方法,后者主要供ContextLoader使用。

注意:在有多个@Configuration类的情况下,稍后的@Bean定义将覆盖之前加载的文件中定义的那些。可以利用这一点,通过额外的@Configuration类有意地重写某些bean定义。

GroovyWebApplicationContext

Groovy脚本参考:https://www.cnblogs.com/tiechui2015/p/10828457.html

WebApplicationContext实现,它从GroovyBeanDefinitionReader理解的Groovy bean定义脚本和XML文件中获取配置。对于web环境,这基本上相当于GenericGroovyApplicationContext。
默认情况下,配置将从“/WEB-INF/applicationContext”获得。groovy“用于根上下文”和/WEB-INF/test-servlet。groovy,用于具有名称空间“test-servlet”的上下文(类似于具有servlet名称“test”的DispatcherServlet实例)。

配置位置默认值可以通过ContextLoader的“contextConfigLocation”上下文参数和FrameworkServlet的servlet init-参数来覆盖。配置位置可以表示具体的文件,比如“/WEB-INF/context”,groovy“或者ant样式的模式,如/WEB-INF/*-context”。注意”.xml"文件将被解析为xml内容;所有其他类型的资源都将解析为Groovy脚本。

注意:在多个配置位置的情况下,稍后的bean定义将覆盖之前加载的文件中定义的bean。可以利用这一点,通过额外的Groovy脚本有意地重写某些bean定义。

对于读取不同bean定义格式的WebApplicationContext,创建abstractrefremblewebapplicationcontext的一个类似子类。这样的上下文实现可以指定为“contextClass”上下文-参数为ContextLoader或“contextClass”init-参数为FrameworkServlet。

XmlWebApplicationContext

WebApplicationContext实现,它从XmlBeanDefinitionReader理解的XML文档中获取配置。这实际上相当于web环境中的GenericXmlApplicationContext。
默认情况下,配置将从“/WEB-INF/applicationContext”获得。xml“用于根上下文”和/WEB-INF/test-servlet。xml,用于具有名称空间“test-servlet”的上下文(类似于具有servlet名称“test”的DispatcherServlet实例)。

配置位置默认值可以通过ContextLoader的“contextConfigLocation”上下文参数和FrameworkServlet的servlet init-参数来覆盖。配置位置可以表示具体的文件,比如“/WEB-INF/context”。xml”或ant样式的模式,如/WEB-INF/*-context。

注意:在多个配置位置的情况下,稍后的bean定义将覆盖之前加载的文件中定义的bean。可以利用这一点,通过额外的XML文件有意地重写某些bean定义。

对于读取不同bean定义格式的WebApplicationContext,创建abstractrefremblewebapplicationcontext的一个类似子类。这样的上下文实现可以指定为“contextClass”上下文-参数为ContextLoader或“contextClass”init-参数为FrameworkServlet。

ClassPathXmlApplicationContext

独立的XML应用程序上下文,从类路径获取上下文定义文件,将普通路径解释为包含包路径的类路径资源名(例如“mypackage / myresource.txt”)。对于测试用例以及嵌入在jar中的应用程序上下文非常有用。
配置位置默认值可以通过abstractrefrembleconfigapplicationcontext . getconfiglocations()来覆盖,配置位置可以表示具体的文件,比如“/myfiles/context”。或ant样式的模式,如/myfiles/*-context。

注意:在多个配置位置的情况下,稍后的bean定义将覆盖之前加载的文件中定义的bean。可以利用这一点,通过额外的XML文件有意地重写某些bean定义。

这是一个简单、一站式的便利ApplicationContext。考虑将GenericApplicationContext类与XmlBeanDefinitionReader结合使用,以获得更灵活的上下文设置。

FileSystemXmlApplicationContext

独立的XML应用程序上下文,从文件系统或url获取上下文定义文件,将普通路径解释为相对文件系统位置(例如,url)。“mydir / myfile.txt”)。对于测试用例和独立环境都很有用。
注意:普通路径将总是被解释为相对于当前VM工作目录,即使它们以斜杠开始。(这与Servlet容器中的语义一致。)使用显式的“file:”前缀来强制执行绝对文件路径。

配置位置默认值可以通过abstractrefrembleconfigapplicationcontext . getconfiglocations()来覆盖,配置位置可以表示具体的文件,比如“/myfiles/context”。或ant样式的模式,如/myfiles/*-context。(参见AntPathMatcher javadoc了解模式细节)。

注意:在多个配置位置的情况下,稍后的bean定义将覆盖之前加载的文件中定义的bean。可以利用这一点,通过额外的XML文件有意地重写某些bean定义。

这是一个简单、一站式的便利ApplicationContext。考虑将GenericApplicationContext类与XmlBeanDefinitionReader结合使用,以获得更灵活的上下文设置。

2.GenericApplicationContext

拥有一个内部DefaultListableBeanFactory实例的通用ApplicationContext实现,它不假定一个特定的bean定义格式。实现BeanDefinitionRegistry接口,以便允许对其应用任何bean定义读取器。
典型的用法是通过BeanDefinitionRegistry接口注册各种bean定义,然后调用AbstractApplicationContext.refresh()来使用应用程序上下文语义初始化这些bean(处理applicationcontext taware、自动检测beanfactorypostprocessor,等等)。

与为每次刷新创建新的内部BeanFactory实例的其他ApplicationContext实现相比,此上下文的内部BeanFactory从一开始就可用,以便能够在其上注册bean定义。refresh()只能调用一次。

Usage example:

 GenericApplicationContext ctx = new GenericApplicationContext();
 XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
 xmlReader.loadBeanDefinitions(new ClassPathResource("applicationContext.xml"));
PropertiesBeanDefinitionReader propReader
= new PropertiesBeanDefinitionReader(ctx); propReader.loadBeanDefinitions(new ClassPathResource("otherBeans.properties"));
ctx.refresh(); MyBean myBean
= (MyBean) ctx.getBean("myBean");

对于XML bean定义的典型情况,只需使用ClassPathXmlApplicationContext或FileSystemXmlApplicationContext,它们更容易设置—但灵活性较差,因为您可以仅为XML bean定义使用标准资源位置,而不是混合使用任意的bean定义格式。在web环境中,等效的是XmlWebApplicationContext。
对于需要以可刷新的方式读取特殊bean定义格式的自定义应用程序上下文实现,考虑从abstractrefrembleapplicationcontext基类派生。

AnnotationConfigApplicationContext

独立的应用程序上下文,接受组件类作为输入——特别是@ configuration注释的类,也接受普通的@Component类型和使用javax兼容JSR-330的类注入注解。
允许使用register(Class…)一个一个地注册类,也允许使用scan(String…)进行类路径扫描。

对于多个@Configuration类,后面类中定义的@Bean方法将覆盖前面类中定义的方法。可以利用这一点,通过额外的@Configuration类有意地重写某些bean定义。

GenericGroovyApplicationContext

一个扩展GenericApplicationContext并实现GroovyObject的ApplicationContext实现,这样就可以使用点解引用语法来检索bean,而不是使用AbstractApplicationContext.getBean(java.lang.String)。
可以把它看作是Groovy bean定义的GenericXmlApplicationContext的等价物,或者甚至是它的升级,因为它也可以无缝地理解XML bean定义文件。主要的区别是,在Groovy脚本中,上下文可以与内联bean定义闭包一起使用,如下所示:

import org.hibernate.SessionFactory
 import org.apache.commons.dbcp.BasicDataSource

 def context = new GenericGroovyApplicationContext()
 context.reader.beans {
     dataSource(BasicDataSource) {                  // <--- invokeMethod
         driverClassName = "org.hsqldb.jdbcDriver"
         url = "jdbc:hsqldb:mem:grailsDB"
         username = "sa"                            // <-- setProperty
         password = ""
         settings = [mynew:"setting"]
     }
     sessionFactory(SessionFactory) {
         dataSource = dataSource                    // <-- getProperty for retrieving references
     }
     myService(MyService) {
         nestedBean = { AnotherBean bean ->         // <-- setProperty with closure for nested bean
             dataSource = dataSource
         }
     }
 }
 context.refresh()

或者,从外部资源(例如“applicationContext”)加载一个Groovy bean定义脚本,如下所示。groovy文件):

import org.hibernate.SessionFactory
 import org.apache.commons.dbcp.BasicDataSource

 beans {
     dataSource(BasicDataSource) {
         driverClassName = "org.hsqldb.jdbcDriver"
         url = "jdbc:hsqldb:mem:grailsDB"
         username = "sa"
         password = ""
         settings = [mynew:"setting"]
     }
     sessionFactory(SessionFactory) {
         dataSource = dataSource
     }
     myService(MyService) {
         nestedBean = { AnotherBean bean ->
             dataSource = dataSource
         }
     }
 }
 

用下面的Java代码创建GenericGroovyApplicationContext(可能使用ant样式的'*'/'**'位置模式):

GenericGroovyApplicationContext context = new GenericGroovyApplicationContext();
 context.load("org/myapp/applicationContext.groovy");
 context.refresh();
 

或者更简洁,不需要额外的配置:

ApplicationContext context = new GenericGroovyApplicationContext("org/myapp/applicationContext.groovy");

这个应用程序上下文还理解XML bean定义文件,允许与Groovy bean定义文件无缝混合和匹配。”。xml"文件将被解析为xml内容;所有其他类型的资源都将解析为Groovy脚本。

GenericWebApplicationContext

GenericApplicationContext的子类,适合于web环境。
实现ConfigurableWebApplicationContext,但不是用于web.xml中的声明式设置。相反,它是为编程设置而设计的,例如用于构建嵌套上下文或用于WebApplicationInitializers。

如果您打算实现一个从配置文件读取bean定义的WebApplicationContext,考虑从abstractrefremblewebapplicationcontext派生,在loadBeanDefinitions方法的实现中读取bean定义。

将资源路径解释为servlet上下文资源,即web应用程序根下的路径。绝对路径,例如web应用程序根目录之外的文件,可以通过“file:”url访问,由AbstractApplicationContext实现。

除了由AbstractApplicationContext检测到的特殊bean之外,这个类还在上下文中检测名为“ThemeSource”的ThemeSource bean。

GenericXmlApplicationContext

具有内置XML支持的方便应用程序上下文。这是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext的灵活替代方案,通过设置器配置,最终调用AbstractApplicationContext.refresh()来激活上下文。
在多个配置文件的情况下,后面文件中的bean定义将覆盖前面文件中定义的bean。可以利用这一点,通过附加到列表中的额外配置文件有意地覆盖某些bean定义。

ResourceAdapterApplicationContext

用于JCA ResourceAdapter的ApplicationContext实现。需要使用JCA BootstrapContext进行初始化,并将其传递到实现BootstrapContext taware的spring托管bean。

StaticApplicationContext

ApplicationContext实现,它支持以编程方式注册bean和消息,而不是从外部配置源读取bean定义。主要用于测试。

StaticWebApplicationContext

用于测试的静态WebApplicationContext实现。不打算用于生产应用程序。
实现ConfigurableWebApplicationContext接口以允许直接替换XmlWebApplicationContext,尽管实际上不支持外部配置文件。

将资源路径解释为servlet上下文资源,即web应用程序根下的路径。绝对路径,例如web应用程序根目录之外的文件,可以通过“file:”url访问,由DefaultResourceLoader实现。

除了由AbstractApplicationContext检测到的特殊bean之外,这个类还在特殊bean名称“ThemeSource”下检测上下文中的ThemeSource类型的bean。

原文地址:https://www.cnblogs.com/QianYue111/p/13808339.html