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。