ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Container概览

2021-06-09 07:01:23  阅读:192  来源: 互联网

标签:xml ApplicationContext Container 配置文件 Spring 概览 context 使用


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自动进行。

标签:xml,ApplicationContext,Container,配置文件,Spring,概览,context,使用
来源: https://www.cnblogs.com/kicey/p/14865313.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有