IoC详解

来源:互联网 发布:淘宝上怎么找货源 编辑:程序博客网 时间:2024/06/15 13:11

<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:黑体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimHei;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:1 135135232 16 0 262144 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"/@黑体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:1 135135232 16 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;}h2{mso-style-link:"标题 2 Char";mso-style-next:正文;margin-top:13.0pt;margin-right:0cm;margin-bottom:13.0pt;margin-left:0cm;text-align:justify;text-justify:inter-ideograph;line-height:173%;mso-pagination:lines-together;page-break-after:avoid;mso-outline-level:2;font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-font-kerning:1.0pt;}span.2Char{mso-style-name:"标题 2 Char";mso-style-locked:yes;mso-style-link:"标题 2";mso-ansi-font-size:16.0pt;mso-bidi-font-size:16.0pt;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:黑体;mso-hansi-font-family:Arial;mso-font-kerning:1.0pt;mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA;font-weight:bold;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:612.0pt 792.0pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:36.0pt;mso-footer-margin:36.0pt;mso-paper-source:0;}div.Section1{page:Section1;} /* List Definitions */ @list l0{mso-list-id:950435434;mso-list-template-ids:1555601018;}@list l0:level1{mso-level-text:%1;mso-level-tab-stop:36.75pt;mso-level-number-position:left;margin-left:36.75pt;text-indent:-36.75pt;mso-ansi-font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-ansi-font-weight:bold;}@list l0:level2{mso-level-start-at:4;mso-level-text:"%1/.%2";mso-level-tab-stop:36.75pt;mso-level-number-position:left;margin-left:36.75pt;text-indent:-36.75pt;mso-ansi-font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-ansi-font-weight:bold;}@list l0:level3{mso-level-text:"%1/.%2/.%3";mso-level-tab-stop:36.75pt;mso-level-number-position:left;margin-left:36.75pt;text-indent:-36.75pt;mso-ansi-font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-ansi-font-weight:bold;}@list l0:level4{mso-level-text:"%1/.%2/.%3/.%4";mso-level-tab-stop:36.75pt;mso-level-number-position:left;margin-left:36.75pt;text-indent:-36.75pt;mso-ansi-font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-ansi-font-weight:bold;}@list l0:level5{mso-level-text:"%1/.%2/.%3/.%4/.%5";mso-level-tab-stop:54.0pt;mso-level-number-position:left;margin-left:54.0pt;text-indent:-54.0pt;mso-ansi-font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-ansi-font-weight:bold;}@list l0:level6{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6";mso-level-tab-stop:54.0pt;mso-level-number-position:left;margin-left:54.0pt;text-indent:-54.0pt;mso-ansi-font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-ansi-font-weight:bold;}@list l0:level7{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7";mso-level-tab-stop:72.0pt;mso-level-number-position:left;margin-left:72.0pt;text-indent:-72.0pt;mso-ansi-font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-ansi-font-weight:bold;}@list l0:level8{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8";mso-level-tab-stop:72.0pt;mso-level-number-position:left;margin-left:72.0pt;text-indent:-72.0pt;mso-ansi-font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-ansi-font-weight:bold;}@list l0:level9{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8/.%9";mso-level-tab-stop:90.0pt;mso-level-number-position:left;margin-left:90.0pt;text-indent:-90.0pt;mso-ansi-font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-ansi-font-weight:bold;}ol{margin-bottom:0cm;}ul{margin-bottom:0cm;}-->

1.IoC

1.1  IoC主要是协调各组件间相互的依赖关系,同时大大提高了组件的可移植性,组件的重用机会也变得更多,在传统的实现中,由程序内部代码来控制程序之间的关系,我们经常使用new关键字来实现两组件间关系的组合,这种实现方式会造成程序之间耦合。IoC很好的解决了该问题,它将实现组件间关系从程序内部提到外部容器来管理,也就是说由容器在运行期间将组件间的某种依赖关系动态地注入组件中,控制程序间关系的实现交给了外部的容器来完成,即常说的好莱坞原则“Don’t call us,we’ll call you”

1.2  IoC的本质是控制权由应用代码中转移到了外部容器,控制权的转移即是所谓的反转,控制权的转移带来的好处就是降低了业务对象之间的依赖程度,即实现了解耦。

1.3  IoC实现的策略:主要是依赖注入DI(Dependency Injection),即对象只提供普通的方法,让容器去决定依赖关系,容器全权负责组件的装配,它会把符合依赖关系的对象通过属性(JavaBean中的gettersetter.NET中的property)或者是构造函数传递给需要的对象。通过属性注射依赖关系的做法称为设值方法注入(Setter Injection),将构造子参数传入的做法称为构造子注入(Constructor Injection)

DI让容器全权去负责依赖查询,受控对象只要暴露属性和带参数的构造函数,使容器可以在初始化对象的时候设置对象间的依赖关系,这种方式不需要依赖特定API和接口,只要依赖语言本身就可以实现了,即language-based IoC。它主要由以下好处:查询以来操作和应用代码分离;受控对象不会使用到容器特定的API,这样我们的受控对象可以搬出容器单独实现。

1.4         DI高级实现 IoC模式是解决调用者和被调用者之间的一种关系,在UML中用依赖Dependency表示。但是这种依赖在分离关注的思维下是不可忍耐的,必须切割,实现调用者和被调用者之间的解耦,新的IoC模式DependecyInjection模式就是由此产生的,是依赖注射的意思,也就是先将依赖剥离,然后在适当的时候在注射进入。上说提到的分离关注(Separation of Concerns,SOC),是IoC模式和AOP产生的最原始动力,它通过功能分解来得到系统的关注点,这些关注点可以是组件Components、方面Aspects或服务Services

2.SpringIoC容器的实现方式

SpringIoC场景中,它将所有Bean的配置放在一个XML配置文件中,我们只需编写调用者和被调用者类的代码即可,它的实现主要是利用了Java中的反射技术。

Spring设计的核心是org.springframework.beans包,它的设计目标是与JavaBean组件一起使用,这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个抽象是BeanFactory接口,它是工厂模式的实现,允许通过名称创建和检索对象,也可以管理对象之间的关系。

Bean工厂的概念是Spring作为IoC容器的基础,IoC将处理事情的责任从应用程序代码转移到框架,Spring框架使用JavaBean属性和配置来指出必需设置的依赖关系。我们最常用的BeanFactory定义是XmlBeanFactory,它根据XML文件中的定义装入Bean,在XML文件中定义的Bean是被消加载的,这意味着在需要Bean之前,Bean本身不会被初始化,要从BeanFactory检索Bean,只需要调用getBean()方法,传入将要检索的Bean的名称即可。

 

 

原创粉丝点击