IoC(控制翻转)推导
以前的代码架构
-
一般咱们之前实现项目的时候会分为这么几步:程序员
-
- 先写一个UserDao接口
public interface UserDao { public void getUser(); }
-
- 再去写一个Dao的实现类
public class UserDaoImpl implements UserDao { @Override public void getUser() { System.out.println("get"); } }
-
- 而后去写UserService的接口
-
- 最后去写Service的实现类(组合)
public class UserServiceImpl implements UserService { private UserDao userDao = new UserDaoImpl(); @Override public void getUser() { userDao.getUser(); } }
-
- 最后再去使用它(测试)。
@Test public void test(){ UserService service = new UserServiceImpl(); service.getUser(); }
上面就是咱们之前实现一个功能的总体逻辑,也算是很清晰,可是存在着一个问题,即由程序员来控制代码的生成,对于每次的需求变动咱们都须要去改动咱们相应的代码,牵一发而动全身,并且这样代码的耦合性过高了。架构
IOC的理念
为了解决由于需求的改动而频繁去更改代码,咱们在须要用到它的地方不去实现它,而是利用set提供一个接口。这样咱们把建立对象的主动权交给了调用者即控制翻转。程序不用去管如何建立以及实现的,只须要提供一个接口。让调用者来决定,框架
public class UserServiceImpl implements UserService { private UserDao userDao; // 利用set来进行动态实现值的注入 public void setUserDao(UserDao userDao){ this.UserDao=userDao; } }
IoC本质
控制反转(IoC),是一种设计思想,DI(依赖注入)是实现IoC的一种方法。ide
- Ioc是Spring框架的核心内容,使用多种方式完美的实现了IoC,可使用XML配置也可使用注解,新版本的Spring也能够零配置实现IoC
- Spring容器在初始化时先读配置文件、根据配置文件或元数据建立于组织对象存入容器中,程序使用时再从IoC容器中取出须要的对象。
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式能够把二者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。测试
- 控制反转是一种经过描述(XML或注解)并经过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)
最后
- 第一次发表,若是亲们以为看完有收获,但愿能给我点个赞,这将会是我更新的最大动力,感谢各位的支持。
- 若是文章有错误,但愿联系我指正,还望多多关注、转发!