一、IOC的概念和原理
1、什么是IOC(Inversion of Control)
(1)控制反转,是面向对象编程的一种设计原则,使用IOC目的是降低耦合度。
(2)把对象创建和对象之间的调用过程,交给Spring进行管理
例如,有两个类,User类
和Person类
,那么想要在User类
中调用Person类
的方法,那么在User类
中就要得到Person对象
,这就是对象调用,现在把这个过程交给Spring处理,此即IOC
2、IOC底层原理
(1)xml解析、工厂模式、反射
创建两个类UserService
,UserDao
class UserService
{
excute()
{
}
}
class UserDao
{
add()
{
.......
}
}
现在想要在UserService类
中excute方法
中调用UserDao
中的add方法
那么可以这么做:
(1)原始方式
class UserService
{
excute()
{
UserDao dao=new UserDao();
dao.add();
}
}
class UserDao
{
add()
{
.......
}
}
缺点:耦合度太高,当UserDao
的路径变化了,或者是User
中的add方法
变了,UserService
都要跟着相应发生变化。由于程序讲究“高内聚,低耦合”
,因此这样不利于程序的扩展
(2)工厂模式
通过创建一个中间类降低UserService
和UserDao
之间的耦合
class UserFactory
{
public static UserDao getDao()
{
return new UserDao();
}
}
那么就可以这么调用
class UserDao
{
add()
{
......
}
}
class UserService
{
excute()
{
UserDao dao=UserFactory.getDao();
dao.add();
}
}
虽然UserService
与UserDao
之间解耦合了,UserFactory
与其它两个之间还是存在耦合,使用工厂模式是为了降低耦合
(3)使用IOC
在这里如果UserDao
的路径发生变化了,工厂类也不需要进行修改,进一步降低了耦合
1、IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂
2、Spring 提供 IOC 容器实现两种方式:(两个接口)
(1)BeanFactory
- IOC 容器基本实现,是 Spring 内部的使用接口
- 不提供开发人员进行使用加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
(2)ApplicationContext
- BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人
员进行使用 - 加载配置文件时候就会把在配置文件对象进行创建
3、ApplicationContext 接口有实现类