• 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。

  • 相关阅读:
    关于MQ的对比
    关于RabbitMQ(二)
    关于QPS、TPS、并发用户数、吞吐量的关系
    关于使用Ecplise构建gradle项目
    关于记录一次线上真实环境多线程引发的问题
    关于MySQL——find_in_set()函数的使用
    关于数据库的表连接
    关于Java线程池
    IntelliJ搭建Scala及Spark工程
    idea编写wordcount程序及spark-submit运行
  • 原文地址:https://www.cnblogs.com/QianYue111/p/13808339.html
Copyright © 2020-2023  润新知