备忘

2017-06-12  本文已影响15人  MentallyL

控制反转(IOC):不需要主动去创造,或者不需要自己去取。而是直接告诉我需要什么,然后你给我放进来.

IoC模式,系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。其中一个特点就是通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码

可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java 的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

优缺点编辑
IoC最大的好处是什么?因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拔(有点像USB接口和SCSI硬盘了)。
IoC最大的缺点是什么?(1)生成一个对象的步骤变复杂了(事实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。(2)对象生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。(3)缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺陷所在。

配置注意点:

<util:list id="cars">
        <ref bean="car">
        <ref bean="car2">
  </util:list> 
<bean id="id1" class="com.xxx.xxx.xxx.object" p:name="aa" p:name2="bb" p:name3="cc">
</bean>
depends-on="bean名字"

这个前置的bean会在这个bean之前创建好

我们一般用实现ApplicationContet这个接口的实现类,不用BeanFactory(这个BeanFactory是给spring里自己用的)

ApplicactionContext的主要的实现类:
ClassPathXmlApplicationContext:从类路径下加载配置文件
FileSystemXmlApplicationContext:从文件系统下加载配置文件

ConfigurableApplicationContext:对ApplicationContext的扩展,主要是增加了两个方法:refresh,close用来刷新和关闭上下文

WebApplicationContext是专门用来给web应用用的,允许从web的根目录来完成初始化工作

上一篇 下一篇

猜你喜欢

热点阅读