spring框架, 有两大核心部分, 分别是
- spring的 IOC/DI
- spring的 AOP
其中, IOC和DI虽然不是同一个概念, 却是同一个概念的不同角度描述
IOC: 控制反转
spring的IOC, 也称为控制反转, 控制反转是从容器角度描述的
springIOC解决了什么问题呢? 首先我们来看一下下面的代码, 分析下oop的依赖
//登录验证
//1.获取用户名和密码
String uname = request.getParameter("uname");
String upwd = request.getParameter("upwd");
//2.根据参数, 调用dao查询数据库, dao实现类判断true or false
boolean loginSucess = new LoginDaoImpl().loginCheck(uname,upwd);
上面的代码中, 我们必须先写上LoginDaoInpl这个类, 并且实现这个方法, 否则编译不通过, 传统的oop代码中, 代码互相依赖很强, 也就是耦合度很高
springIOC的目的是为了代码解耦, 在上面这个例子中, 你可以理解为controller层(业务层)直接调用了bean(组件), springIOC则禁止coltroller直接调用bean, 我们把bean交给spring容器管理, 而controller从容器中获取bean, 这样一来编译期依赖就会减少, 至少编译能通过, 这也意味着代码从逻辑上更容易理解.
springIOC通过容器作为中间对象, 减少了controller和bean之间的耦合度
DI: 依赖注入
springIOC算是一种思想, 而springDI是它的一种简单实现方式
我们如何把bean交给spring容器管理? DI则是这样的实现方式, 类似于Maven这样的pom.xml导入依赖坐标的方式, DI同样使用xml的方式把bean注入到容器中, 这也就是依赖注入
为了简化依赖注入, 有更简单的注解注入方式
综上, springIOC/DI其实表达的是同一个思想, 但它们是在不同角度的理解.