什么是IOC:控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
使用IOC目的:为了耦合度降低
首先提出一个问题:如果现在有两个类,一个是UserService,一个是UserDao。UserDao中有一个方法add(),我们想在UserService的execute()方法中调用add方法,改如何做?
最简单的方式当然是实例化对象,
具体代码:
UserDao.java:
class UserDao{ public void add(){ System.out.println("hahaha"); } }
UserService.java:
public class UserService { public void execute(){ UserDao dao = new UserDao(); dao.add(); } }
但这种方法有个致命的问题,就是耦合度太高。
那我们就要想办法降低耦合度。
首先想到的是工厂设计模式:
我们先建立一个工厂类UserFactory:
public class UserFactory { public static UserDao getDao(){ return new UserDao(); } }
将UserService改为:
public class UserService { public void execute(){ UserDao dao = new UserFactory().getDao(); } }
思路图:
这样确实降低了UserDao和UserFactory的耦合度,但是UserService和UserDao之间的耦合度还是比较高,并没有使耦合度降到最低。
这就需要用到IOC容器了,下面是IOC容器的原理: