Spring Container概览

Posted Kicey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Container概览相关的知识,希望对你有一定的参考价值。

Container概览

ApplicationContext接口代表了Spring IoC container以及负责初始化,配置,组合beans,这些是根据读取配置文件(XML或者Java注解或者Java代码,你需要在配置文件中表述构建应用所需要的对象那个,以及它们之间的依赖)进行的。

Spring提供了ApplicationContext接口的几个实现。在一个独立运行的应用中,通常使用ClassPathXmlApplicationContext或者FileSystemXmlApplicationContext。XML是定义配置文件的传统格式,不过可以提供一点XML注解来的声明性地启用对其它配置格式的支持。

在大多数的应用场景下,用户不需要使用代码去显示地初始化一个或更多的Spring IoC container。例如一个web 应用的场景,web.xml即可,或者使用Spring Boot不需要手动配置,只需要使用生成的Main方法中的SpringApplication.run()

image-20210605215936083

配置文件

对于XML配置的文件,需要在顶层元素<beans>中定义</bean>元素,而在Java的配置方式中,需要在注解为@Configuration的类中定义注解为@Bean的方法。一个bean至少需要一个Class信息。

初始化一个Container

有一些实现了ApplicationContext的类与资源的路径相关比如ClassPathXmlApplicationContext,会在classpath中读取给定的配置文件从而实例化。

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

除了直接在实例化的时候提供文件信息,也可以在xml的配置文件的顶层元素<Beans>下使用< import resourse = "filename">来使一个配置文件包含另一个配置文件,当这个配置文件被加载时,其包含的配置文件也被加载。</import>这个指令时命名空间自身提供的,其他的命名空间会有其他的指令。

使用url来定位配置文件时,不建议使用绝对路径或者使用../跳转到上级路径,作为替代可以使用&{pathToBeParsed}占位符。

使用Container

ApplicationContext是一个拥有一个bean和其依赖的注册机的高级工厂类的接口。使用T getBean(String name, Class requiredType)你可以检索一个bean的实例,例如:

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
PetStoreService service = context.getBean("petStore", PetStoreService.class);

这些实现中最具弹性的变体是GenericApplicationContext,这个实现可以将其他Reader类实例作为代理来组合,例如:

GenericApplicationContext context = new GenericApplicationContext(); 
new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml"); 
context.refresh();

注意:在实例化XmlBeanDefinitionReader时使用了context作为构造参数,使其称为context的一个代理,然后在调用了它的加载配置文件的方法。

实际上,你并不需要调用这个getBean方法,从而与Spring架构解耦合,而依赖的注入将由Spring自动进行。

以上是关于Spring Container概览的主要内容,如果未能解决你的问题,请参考以下文章

Spring源码分析Bean加载流程概览

1.3 Spring概览

ThymeLeaf 片段在错误 th:if 上执行

Spring事务王国概览

Spring Core Container 源码分析三:Spring Beans 初始化流程分析

1.Spring Framework 5 概览