Spring与IoC

控制反转(IOC,Inversion of Control),是一个概念,是一种思想。

指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器

但是,需要注意,IoC也是有局限性的,其不能使用在分布式系统中。即其所依赖的反转到的外部容器,必须要与控制权出让方同处于一个JVM中。
IoC是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式有两种:依赖注入和依赖查找。依赖注入方式应用更为广泛。
. 依赖查找:Dependency Lookup,DL,容器提供回调接口和上下文环境给组件,程序代码则需要提供具体的查找方式。比较典型的是依赖于JNDI系统的查找。
. 依赖注入:Dependency Injection,DI,程序代码不做定位查询,这些工作由容器自行完成。
依赖注入DI是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。
Spring的依赖注入对调用者与被调用者几乎没有任何要求,完全支持POJO之间依赖关系的管理。
依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。

一、SpringDI的引入

1、SpringDI的底层实现原理

Spring DI = 工厂 + 反射 + 配置文件
传统开发中的面向抽象编程,调用者与接口实现类是紧密耦合在一起的。若实现类发生改变,则必须修改原有代码:在调用者类中将实现类进行更换。但,这不符合软件开发的OCP原则(OCP,Open-Close Principle)。
OCP原则,即开闭原则,指软件实体(类、模块、功能等)应该可以被扩展,但不可被修改。即对功能扩展是开放的,对已有代码修改是关闭的。也就是说,应该在不修改现有代码的基础上,扩展新功能。
若要使调用者类与接口实现类之间实现解耦,可使用工厂模式。但,这又使调用者与工厂耦合,工厂与接口实现类耦合。实现类的更换,不需要修改调用者类,但需要修改工厂,即代码仍需重新编译。
此时,可以通过在工厂类中使用“反射 + 配置文件”的方式来加载接口实现类。而这就是Spring的IoC的工作原理。

2、普通三层架构编程

举例:common

Step1:创建一个Java Project
Step2:创建Service层接口IStudentService
Step3:创建接口实现类StudentServiceImpl
Step4:创建Dao层接口IStudentDao
Step5:创建接口实现类StudentDaoImpl
Step6:编写测试类MyTest

3、工厂模式编程

举例:factory
Step1:复制common项目,更名为factory
Step2:创建工厂类ServiceFactory 与DaoFactory
Step3:修改MyTest中Service的获取方式

Step4:修改StdentServiceImpl中Dao的获取方式

4、工厂模式+反射编程

举例:reflect

Step1:复制factory项目,更名为reflect

Step2:修改Service工厂类:使用反射创建Service实现类对象

Step3:修改Dao工厂类:使用反射创建Dao实现类对象

猜你喜欢

转载自www.cnblogs.com/wangbin2188/p/9013860.html