1.什么是IoC容器
1.什么是容器
1.为对象运行提供环境
2.管理着整个对象的生命周期
3.支持查找以及依赖决策
2.什么是IoC容器
1.IoC即 控制反转 将创建对象的权力交给容器,用户只需要声明和调用->不需要手动创建对象
2.DL 依赖注入 容器来管理用户声明的关系->不需要手动set,ioc的实现形式
3.主要过程: 资源的感知定位,解析,注册
BeanDefinition的管理,增强
Bean对象的实例化,初始化
Bean对象依赖的管理,及注入
3.IoC容器和spring IoC容器
1.能够实现IoC定义都可以称为IoC容器,不过spring代表的比较好
2.JavaSE中 JavaBeans和Java ServiceLoader(SPI) JNDI 都可以看做IOC容器
1.JavaBeans的使用和定义满足IoC容器的控制和依赖的概念
2.SPI 把Class的定位,访问,加载,创建都交给JVM来做,也可以看做IoC容器
3.JNDI通过目录,帮助我们去找查找资源,IoC通常靠名称(定义的id)
JavaEE中 EJB是传统实现和Servlet依赖JNDI
开源 Apache Avalon 已经停更了/PicoContainer(spring依赖注入的灵感来自于它)
Google Guice 轻量级框架
当然还有无可置疑的spring Framework
4.如何看待spring IoC容器
1.对于spring IoC来说 ioc容器是一种产品,除了基础能力的ConfigurableApplicationContext容器,spring提供了各种各样的产品来适应不同的使用场景
2.spring ioc容器 提供高度的集成性和可扩展性
3.spring的目的是一个生态,是全家桶,而非单一框架,为企业级应用提供一整套解决方案,这就势必导致,这一整套框架变重,所以你要知道你用的是spring 提供的哪一个IoC容器,并且默认提供了那些支持
4.spring适合企业级-业务开发,简洁,高效,易用,不适合中间件/组件,的开发
2.为什么使用Spring IoC容器
1.保姆式框架,使用简单,学习成本低
2.强大的扩展能力,提供了太多的可能,beanFactory和BeanPostProcessor机制
3.强大的生态,集成几乎所有的主流框架,同时新兴的框架又提供对spring的支持
4.广大的用户,你出现的问题,总有人出现过,找到解决方案的速度更快
5.其他的IoC容器,要么功能补全,要么学习成本高
3.如何使用Spring IoC容器
1.web容器的监听器
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
传统web容器方式是通过启动web容器->启动webListener->创建IoC容器
2.springboot方式
application class main方法 SpringApplication.run(thisClass)
springboot启动->applicationClass main方法->springboot listener,initlizer->spring cloud体系的Ioc父容器->当前应用程序的子IoC容器->启动并绑定tomcat