Spring系列.IOC容器简介
IOC容器简介
我们经常说Spring是一个IOC容器,Spring中这么多代码,那么到底哪些类是IOC容器的主要表现形式呢?其实在Spring中IOC容器的主要表现形式是BeanFactory和ApplicationContext这两个接口。这两个接口的具体实现类就可以看成是IOC容器在Spring中的具体体现。
BeanFactory提供了最基本的IOC和依赖注入功能,ApplicationContext继承了BeanFactory,在BeanFactory的基础上添加了很多新功能,主要包括国际化、事件分发机制(ApplicationEvent)、资源访问(Resource)等功能。在实际的开发过程中,一般都会选择ApplicationContext系列的容器实现。下面列举下BeanFactory和ApplicationContext系列容器的常见实现类。
上图是BeanFactory系列容器的继承图,需要重点关注的是DefaultListableBeanFactory,这个类是Spring默认使用基础容器类。在每个ApplicationContext容器中都使用这个基础容器。
-- ApplicationContext
-- ConfigurableApplicationContext
-- FileSystemXmlApplicationContext
-- AnnotationConfigApplicationContext
-- ClassPathXmlApplicationContext
-- WebApplicationContext
-- XmlWebApplicationContext
-- AnnotationConfigWebApplicationContext (不基于Servlet的Web实现)
-- AnnotationConfigServletWebApplicationContext
-- WebServerApplicationContext
-- XmlServletWebServerApplicationContext
-- ServletWebServerApplicationContext
-- AnnotationConfigServletWebServerApplicationContext
上面是ApplicationContext系列的容器实现。常用的有ClasspathXmlApplicationContext和XmlWebApplicationContext。Spring Boot还推出WebServerApplicationContext系列容器,从名字可以看出这个系列的容器是支持内嵌Web Server功能的。但是由于本博客介绍的是基础Spring FrameWork功能,就没列举WebServer系列容器。感兴趣的可以自己去看下Spring Boot的相关内容。
使用IOC容器
初始化容器的代码
//ClassPathXmlApplicationContext支持多次refresh容器
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml","daos.xml");
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/config/services.xml");
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/${placeHolder}/services.xml");
//使用groovy形式
ApplicationContext context = new GenericGroovyApplicationContext("services.groovy", "daos.groovy");
//先new再refresh()
//不支持重复refresh
GenericApplicationContext context = new GenericApplicationContext();
new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml");
context.refresh();
ClassPathXmlApplicationContext支持classpath:/${placeHolder}/services.xml这种以classpath打头的入参
有时Spring的配置会比较多,如果将所有的配置都放在一个文件中会显得比较乱。这时我们可以将同类别的配置放在一个配置文件中。然后再用impoer导入到一个文件中即可.
<beans>
<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>
<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>
</beans>
上面主要介绍了传统的基于xml的使用方式,基于注解和基于Java Code的使用方式参考后面的两篇翻译文章:
配置形式
Spring支持多种形式的配置:传统的xml形式,注解形式和Java code形式。
随着Spring Boot的流行,基于注解和Java Code形式的配置越来越流程了,相反的,传统的xml形式配置用的原理来越少了。
相关文章
- Spring 全家桶之 Spring Boot 2.6.4(八)- 嵌入式 Servlet 容器(Part A)
- Spring学习笔记(十四)——ssm整合mybitis的逆向工程和分页插件
- Spring batch教程 之 spring batch简介
- Quartz任务中调用Spring容器中bean及动态调度任务-SchedulerFactoryBean「建议收藏」
- spring cloud eurake server「建议收藏」
- Spring Boot + flowable 完美结合,快速实现工作流
- 分布式--Spring Security入门
- Spring Security 入门(一)Spring Security中的认证与密码编码器
- Spring基础(七):使用外部属性配置文件
- 理解Spring容器、BeanFactory和ApplicationContext
- Spring Boot快速接入Prometheus监控|写给Java开发运维
- 如何在非Spring容器管理的类中注入/获取 Spring容器中的 Bean?
- Spring for Apache Kafka 3.0 和 Spring for RabbitMQ 3.0 发布
- Spring Cloud LoadBalancer 的高级特性-自定义 ServerList
- Spring Boot 中 @EnableXXX 注解的驱动逻辑
- Spring aop与AspectJ的区别详解编程语言
- Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控详解编程语言
- spring项目使用mave将第三方jar包打进war包中详解编程语言
- spring boot详解编程语言
- Spring IoC容器:BeanFactory和ApplicationContext
- Spring getBean方法:获取容器中的JavaBean
- Spring框架致力于搭建基于MSSQL的稳健开发体系(spring mssql)
- JSP获取Spring注入对象示例