(这篇只说ioc)对于spring初学者来说,可能对ioc比较模糊,问别人“什么叫做ioc,它做了些什么”,得到的答案 无非是“在项目中,要用到一个类的方法或属性时我们都是通过new创建,用了ioc,我们不用自己new,而是交给ioc帮我们创建。”这样的回答没有错,若是再讲一下底层实现,岂不是更明了。。。(躲开,我要装X了,)--(大佬请无视---)
-
spring核心之一ioc(控制反转)
ioc(控制反转):(Inversion of Control,缩写为IoC)是面向对象编程中的一种设计原则,降低代码之间的耦合度,spring核心之一。
我们要用到一个类的方法或者属性时,先说一下我们之前的几种用法。
- 通过new创建对象
public class UserService(){ public void add(){ System.out.println("原始方法"); } } public class UserController(){ //之前我们都是通过 new 来创建UserService 来获取方法 UserService us = new UserService(); us.add(); } /** *这样有个缺陷:如果这个UserService类名或者里面的方法改变了, *那我们的controller是不是也要跟着去改动 * 也就是我们常说的耦合度较高 **/ //slh
- 工厂模式
public class UserService{ public void add(){ //方法体 } } public class UserController{ UserService us = Factory.getService(); us.add(); } public class Factory{ //提供返回service对象的方法 private static UserService getService(){ return new UserService; } } //但是这样虽然让service和controller之间耦合降低了, //但是controller和 factory 之间又有了新的耦合 //slh
- ioc(低耦合)实现
<1>创建XML配置文件
<bean id="UserService" class ="com.sh.slh.UserService"/>
<2>创建工厂类 使用dom4j 解析配置文件+反射//返回UserService的方法 public static UserService getService(){ //1.dom4j 解析文件 //根据xml的id值,得到对应的class属性值 String classValue = "class属性值"; //反射创建类对象 Class cl = Class.forName(classValue); //instance() 创建类对象 UserService us = cl.newInstance(); return us; } //降低了类间的耦合度 //slh
ioc 的底层实现完毕。
除了第一个是原始 需用new关键字来创建对象,通过对象 才能 获取对应的方法或者属性。
第二种 是有了新的耦合
- ioc(低耦合)实现