IOC是一个容器,在spring中,它会认为一切java资源都是javaBean,容器的目标就是管理这些Bean和他们之间的关系,Spring IOC里面装载的各种Bean,也可以理解为Java的各种资源,包括javaBean的创建,事件,行为等,他们由IOC容器管理。除此之外,各个javaBean之间肯定会存在着一定的关系,比如班级是依赖于老师和学生组成的,假设老师,学生都是javaBean,那么他们显然形成了依赖关系,老师和学生有教育和被教育的关系,这些都可以使用SpringIOC容器进行管理。只是SpringIOC管理对象和其依赖关系,采用的不是人为的主动创建,而是由SpringIOC自己通过描述创建的。也就是说Spring是依靠描述来完成对象的创建及其依赖关系的。
下面我们可以举一个简单的例子描述这个问题,比如用户购买了一部骁龙855的手机,去到手机店,问销售员说我想买一部骁龙855的手机,你帮我推荐一下吧,此时有两款手机可供选择,一加7和小米9,具体要买哪一款呢?代码如下、
User user = new User(); //买了一部小米手机 Phone phone = new XiaoMi(); user.setPhone(phone); user.usePhone();
买了小米手机后,用户就和小米手机产生了捆板,这样就会有一个弊端:如果用户换了其他手机品牌,用户又得重新setPhone(手机品牌);。这样Phone接口和其实现类XiaoMi耦合了,如果有一天不在用小米,而是要用一加,那么就要把代码修改为
User user = new User(); //买了一部一加手机 Phone phone = new OnePlus(); user.setPhone(phone); user.usePhone();
那如果其他更好的855手机,岂不是还是要修改代码?如果系统一大就要不断修改,那么对其可靠性将是极大的挑战,而SpringIOC可以解决这个问题。
使用SpringIOC,我们不用new的方式去创建对象,而是使用配置的方式,然后让SpringIoc容器自己通过配置自己去找配置。
<bean id="xiaomi" class="XiaoMi"/> <bean id="onePlus" class="OnePlus"/> <bean id="user" class="User"> <property name="phone" ref="xiaomi"/> </bean> <!--如果要买一加手机,只需要将ref改为onePlus--> <property name="phone" ref="onePlus"/>
总结:不需要去找资源,只要想SpringIoc容器描述所需资源,SpringIoc自己会找到你所需要的资源,这就是SpringIoc的理念。这样就把Bean之间的依赖关系解耦了,更容易写出结构清晰的程序。除此之外,SpringIOC还提供了对JavaBean的生命周期管理,可以延迟加载,可以在生命周期内定义一些行为等,更加方便有效地管理和使用java资源。
来源:https://www.cnblogs.com/jamal/p/10961092.html