- 控制反转,把对象创建和对象之间的调用过程,交给Spring 进行管理
- 使用IOC的目的: 为了降低耦合度
- 做入门案例就是IOC实现
原始模式
class UserService
{
execute()
{...}
}
class UserDao
{
add()
{...}
}
现在我想在UserService中调用UserDao的add()方法
class UserService
{
execute()
{
UserDao dao = new UserDao();
dao.add();
}
}
class UserDao
{
add()
{...}
}
但是这样耦合度太高了。Dao变了,Service也得变
因此出现了 工厂模式:就是为了解耦合
class UserDao
{
add()
{...}
}
class UserFactory
{
public static UserDao getDao()
{
return new UserDao();
}
}
class UserService
{
execute()
{
UserDao dao = UserFactory.getDao();
dao.add();
}
}
但是这样还是会有耦合度,没有降低到最低限度,需要进一步解耦
目的就是为了: 耦合度降低到最低限度
IOC过程(进一步降低耦合度):第一步: xml配置文件,配置创建的对象
< bean id ="起的名字 class= “路径" >
第二步: 有service类和 dao类,创建工厂类
class UserFactory
{
public static UserDao getDao()
{
// 使用xml解析
String classValue = class属性值;
// 通过反射创建对象
Class clazz = Class.forName(classValue);
return (UserDao)clazz.newInstance();
}
}
IOC接口 (BeanFactory)
- IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
- Spring 提供IOC容器完成两种方式(两个接口):
- BeanFactory: IOC容器最基本的实现,是Spring内部的使用接口,不提供开发人员使用
- 加载配置文件的时候不会去创建对象,在获取(使用)对象的时候才去创建对象
- ApplicationContext: 是BeanFactory接口 的子接口,提供更多更强大的功能,一般由开发人员进行使用
- 在加载配置文件的时候就会把配置文件对象进行创建
- BeanFactory: IOC容器最基本的实现,是Spring内部的使用接口,不提供开发人员使用
- ApplicationContext接口有实现类
1.
2. ClassPathXmlApplicationContext 是在项目内部的,FileSystemXmlApplication是在磁盘中的,需写出绝对路径
3. ApplicationContext接口有实现类
- ClassPathXmlApplicationContext 是在项目内部的,FileSystemXmlApplication是在磁盘中的,需写出绝对路径



