IOC容器底层原理

概念

在这里插入图片描述
即,把对象创建以及对象之间的调用都交给spring管理。
目的是使耦合度降低。

底层原理

主要用到的技术:xml解析、工厂模式、反射

原始方式

耦合度太高了,UserDao变了UserService也要跟着变

Class UserDao{
	add(){
	...
	}
}

Class UserService{
	execute(){
		UserDao Dao = new UserDao;
		Dao.add();
	}
}

工厂模式

降低了耦合度,但是没有降低到最低限度

Class UserDao{
	add(){
	...
	}
}

Class UserFactory{
	public static UserDao getDao(){
		return new UserDao();
	}
}

Class UserService{
	execute(){
		UserDao Dao = UserFactory.getDao();
		Dao.add();
	}
}

IOC

把耦合度进一步降低了:比如class的路径变了,现在只需要修改配置文件

  1. xml配置文件,配置要创建的对象
<bean id="dao" class="com.atguigu.UserDao"></bean>
  1. 有service类和dao类,创建工厂类
Class UserFactory{
	public static UserDao getDao(){
		//1 xml解析
		String classValue = class属性值;
		//2 通过反射创建对象
		Class clazz = Class.forName(classValue);//得到编码文件
		return (UserDao) clazz.newInstance();
		
	}
}

IOC接口

  1. IOC思想基于IOC容器完成,而IOC容器底层就是对象工厂。
  2. Spring提供IOC容器实现的两种方式(两个重要接口):
    它们功能相似:都可以解析xml文件创建工厂:
//1加载Spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
//2获取配置创建的对象
User user = context.getBean("user",User.class);

//1加载Spring配置文件
BeanFactory context = new ClassPathXmlApplicationContext("bean1.xml");
//2获取配置创建的对象
User user = context.getBean("user",User.class);

运行结果一样

BeanFactory

IOC文件的基本实现方式,是Spring的内部使用接口,不提供给开发人员进行使用。
*加载配置文件的时候不会创建对象,在获取对象(使用)的时候才会创建对象。

ApplicationContext

BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用。
*加载配置文件的时候就会把在配置文件的对象进行创建
(在实际的开发工作中,因为我们的spring框架一般会结合web,我们会把耗时耗资源的过程都在启动时进行处理,交给服务器完成)

  1. ApplicationContext接口的实现类
    在idea中,选中该接口,快捷键Ctrl+H可以看到该接口的层次结构:
    在这里插入图片描述
    FileSystemXmlApplicationContext:
//1加载Spring配置文件
BeanFactory context = new FileSystemXmlApplicationContext: ("这里需要写上配置文件在系统盘里的路径");

ClassPathXmlApplicationContext:

//1加载Spring配置文件
BeanFactory context = new ClassPathXmlApplicationContext("这里需要写上配置文件在src下面的路径");
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值