持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
1 IOC容器
1 什么是IOC?
IOC, 控制反转,把创建和独享之间的调用过程,交给Spring进行管理.
目的: 为了耦合度降低
2 IOC底层原理
IOC底层原理包括: xml 解析、工厂模式、反射.
案例1
两个类之间调用.
class UserDao{
add(){
.....
}
}
class UserService{
execute(){
UserDao dao = new UserDao();
dao.add()
}
}
这种两个类之间的调用,耦合度很高,不方便维护和扩展.
案例2 改造方案1
class UserDao{
add(){
.....
}
}
方法工厂
class UserFactory{
public static UserDao getDao(){
return new UserDao();
}
}
class UserService{
execute(){
UserDao dao = UserFactory.getDao();
dao.add()
}
}
通过工厂类,将UserService和UserDao解耦,但是工厂类也和使用类耦合,相比方案1,有降低偶和.
案例3 改造方案1
使用的技术包括: xml 解析、工厂模式、反射
主要的目的:将两个类的耦合降到最低.
1 添加xml配置文件
<bean id = "user" class = "com.cf.UserDao"></bean>
2 创建工厂类,获取对象
class UserFactory{
public static UserDao getDao(){
// 1 解析xml
// String classValue = classValue;
// 2 通过反射创建对象
Class clazz = Class.forName(classValue);
return (UserDao)clazz.newInstance();
}
}
综上, 相比三种方案, 一步步降低类之间的耦合, 使用IOC容器管理,可以将类之间的耦合度到最低,方便项目的开发和维护使用.
3 IOC 接口 (BeanFactory)
1 IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂
2 Spring 提供 IOC 容器实现两种方式:(两个接口)
- BeanFactory IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用. (加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象)
- ApplicationContext BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人 员进行使用. (加载配置文件时候就会把在配置文件对象进行创建)
ps: 综上可知,一般项目启动慢,响应快,是因为在项目启动时,加载配置文件,创建了很多需要使用的对象,并进行保存待用.
3 ApplicationContext接口的实现类
常常使用的有:
- FileSystemXmlApplicationContext
- ClassPathXmlApplicationContext