笔记:Spring IoC

Spring IoC

IoC(Inversion Of Control)控制反转:把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。
IoC有两种方式:
1.DI(Dependency Injection)依赖注入
当前软件实体被动接受其依赖的其他组件被IoC容器注入
2.DL(Dependency Lookup)依赖查找
当前软件实体主动去某个服务注册地查找其他依赖的那些服务

我们通常提到的Spring IoC,实际上是指Spring框架提供的IoC容器实现(IoC Container),而使用Spring IoC容器的一个典型代码片段就是:

Public class App {
	public static void main(String[] args) {
		ApplicationContext context = new FileSystemXmlApplicationContext(".....");
		//.....
		MockService service = context.getBean(MockService.class);
		service.doSomething();
	}
}

任何一个使用Spring框架构建的独立的Java应用(Standalone Java Application),通常都会存在一行类似于“context.getBean(…);”的代码,实际上,这行代码做的就是DL的工作,而构建的任何一种IoC容器背后(比如BeanFactory或者ApplicationContext)发生的事情,则更多是DI的过程(也可能有部分DL的逻辑用于对接遗留系统)。

  • Spring IoC容器的依赖注入流程
  1. 阶段一:收集和注册
    第一个阶段可以认为是构建和收集bean定义的阶段,在这个阶段中,我们可以通过XML或者Java代码的方式定义一些bean,然后通过手动组装或者让容器基于某些自动扫描的形式,将这些bean定义收集到IoC容器中。
    假设我们以XML配置的形式来收集并注册单一bean,一般形式如下:
<bean id="mockService" class="..MockServiceImpl">
	...
</bean>

如果嫌逐个收集bean定义麻烦,想批量地收集并注册到IoC容器中,我们也可以通过XML Schema形式的配置进行批量扫描并采集和注册:

<context:component-scan base-package="com.keevol">
  1. 阶段二:分析和组装
    当第一阶段工作完成后,我们可以先暂且认为IoC容器中充斥着一个个独立的bean,它们之间没有任何关系。但实际上,它们之间是有依赖关系的,所以,IoC容器在第二阶段要干的事情就是分析这些已经在IoC容器之中的bean,然后根据它们之间的依赖关系先后组装它们。如果IoC容器发现某个bean依赖另一个bean,它就会将这另一个bean注入给依赖它的那个bean,直到所有bean的依赖都注入完成,所有bean都“整装待发”,整个IoC容器的工作即算完成。
    至于分析和组装的依据,Spring框架最早是通过XML配置文件的形式来描述bean与bean之间的关系的,随着Java业界研发技术和理念的转变,基于Java代码和Annotation元信息的描述方式也日渐兴盛(比如@Autowired和@Inject),但不管使用哪种方式,都只是为了简化绑定逻辑描述的各种“表象”,最终都是为本阶段的最终目的服务。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值