Spring学习笔记一
IOC
概念
Inversion of Control
,翻译为”控制反转“,别名”依赖注入“(Dependency Injection
)。
关键在于四个问题:谁控制谁,控制什么,反转是什么,哪些方面反转了。
所谓IOC,就是由Spring IOC容器来负责对象的生命周期和对象之间的关系。
我们可以先想象一个场景:你需要一个女朋友,直接new BeautifulGirl()
,接下来你想要的各种要求,用set来设置。但是这个过程复杂又繁琐,而且我们必须要面对每个环节,同时在使用完成之后还要负责销毁。这种情况下我们的对象和它所依赖的对象耦合在一起。
但是我们知道,我们依赖对象并不是依赖对象本身,而是依赖对象所提供的服务,当我们需要它的时候,它能够及时提供服务即可,至于它是我们主动去创建还是别人送给我们的,并不那么重要。就像你需要一个女朋友,你可以不用自己找(new),你可以直接跟婚介公司说,你想要这样那样的妹子(需求),婚介公司就会给你一个妹子,你只需要负责接下来的工作。
所以IoC就是相当于一个中介,当你需要什么(功能) 的时候,IoC就会送过来给你,你不用自己去创建销毁。
现在,回答上面四个问题:
1.谁控制谁:IOC Service Provider
(IOC容器) 控制对象。
2.控制什么:控制对象。
3.反转是什么:没有IOC,都是在对象中主动去创建被依赖的对象,这是正转;有IOC,所依赖的对象直接由IoC容器创建后注入到被注入的对象中,依赖的对象由原来的主动变为被动,这是反转。
4.哪些方面反转了:所依赖对象的获取被反转了。
提供的注入方式
- 构造器注入 被注入的对象通过在其构造方法中声明依赖对象的参数列表,让外部知道它需要哪些依赖对象。
- setter 方法注入 对于JavaBean对象而言,我们一般是通过
getter
和setter
方法来访问和设置对象的属性。所以,当前对象只需要为其所依赖的对象提供相应的setter
方法,就可以通过该方法将相应的依赖对象设置到被注入对象中。 - 接口方式注入 接口方式注入显得比较霸道,因为它需要被依赖的对象实现不必要的接口,带有侵入性。
IOC各部分
五大体系:Resource体系、BeanFactory体系、Beandefinition、BeandefinitionReader体系、ApplicationContext体系。(简单介绍一下,后面再继续详细记录。)
- Resource体系 对资源的抽象,它的每一个实现类都代表了一种资源的访问策略。如ClasspathResource、URLResource、FileSystemResource等。ps:资源加载——ResourceLoader。
- BeanFactory体系 BeanFactory是一个非常纯粹的bean容器,它是IOC必备的数据结构,其中BeanDefinition是它的基本结构,它内部维护一个map,根据BeanDefinition的描述进行bean的创建和管理。
- BeanDefinition体系 用来描述Spring中的Bean对象。
- BeanDefinitionReader体系 用来读取Spring的配置文件,并转换成IOC容器内部的数据结构-》BeanDefinition。
- ApplicationContext体系 Spring容器,应用上下文,继承BeanFactory。它与BeanFactory的区别有:1. 继承MessageSource,提供国际化的标准访问策略。 2. 继承ApplicationEventPublisher,提供强大的事件机制。 3. 扩展ResourceLoader,可以用来加载多个Resource,可以灵活访问不同的资源。 4. 对Web应用的支持。
学习笔记,原文章出处:http://cmsblogs.com/?p=2652