对于Spring的IOC控制反转的理解

一:IOC:全名是Inverse Object Control,意为反转对象控制,所谓控制指的是对象的创建控制权,也就是说,把创建对象的控制权反转,对象交给spring去创建(原来的创建控制权在我们手里,我们需要的时候就直接通过new关键字创建对象),这样做的好处是降低了类与类之间的耦合性

二:降低耦合性的体现之一是面向接口编程,如Service类中直接注入Dao接口成员变量,通过Dao接口调用接口方法,Dao接口实现类由容器Spring容器创建,那么Service就不用依赖于Dao接口的具体实现了。Dao接口的实现类对象交给Spring控制,Spring可以直接根据配置文件提供具体的实现类对象(连接Mysql的还是是连接Oracle的)

又或者如Spring容器中实现了HandlerMapping接口的HandlerMapping实现类,DispatcherServlet通过直接遍历容器中的所有HandlerMapping实现类,获取合适的实现类并向上转型为HandlerMapping接口,直接调用接口方法就可以调用对应实现类的具体实现方法,从而降低了DisapacterServlet与具体HandlerMapping实现类的依赖

ioc反转控制,通俗点讲就是我们不用再去new对象了,Spring已经帮我们创建好了,需要什么对象直接在Spring容器获取就可以了

 

三:关于面向接口编程:面向接口编程可以有效地降低类与类直接的耦合性,通俗点讲就是,使用面向抽象(接口)编程,程序的扩展性可以更好

如:在外部类中调用一个实例的方法的方式有以下几种

1.面向具体类:在外部类中创建一个该类的实例对象,通过该实例对象调用方法(高耦合,外部类严重依赖该类,当需要把这个类换成其他类时,如A.a()要换成B.b()时,每一处与A相关的代码都要替换)

2.部分面向接口:在外部类中创建一个接口成员变量,手动创建该接口实现类对象,实现类向上转型成接口,通过接口调用方法(较低耦合,当要换成B类时,直接B类实现该接口进而实现接口方法,把A实现类换成B实现类解可以了,改动外部类创建实例对象时的部分代码即可)

3.完全面向接口:通过容器管理对象(如Spring容器),容器自动注入实现类(进一步降低耦合,当要换成B类时,直接B类实现该接口,把创建权交给容器,由容器注入该实现类,完全不需要改动外部类的代码)(但是当一个接口有多个实现类时,容器是不知道注入哪个实现类的,要自己手动指定,所以也就有多种注入的方式,如@AutoWired,@Resource,@Qualifier等,,SpringMVC常用的方式是遍历所有实现类,如xxx解析器,来匹配合适的实现类)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值