IOC:inversion of Control 控制反转,Spring框架的核心。削减计算机程序的耦合问题,把对象(例如JDBC)的创建权交给Spring。
IOC的两种类型:
- 依赖注入:
- 依赖查找:
Spring安装包下载地址:http://repo.spring.io/libs-release-local/org/springframework/spring/
解压Spring安装包:
- docs:Spring的开发规范、API
- libs:Spring的开发jar包、源码
- schema:Spring的配置文件的约束
创建web项目,引入IOC所需jar包
编写类和接口
问题:能不能在不修改源代码的前提下,将DAO的实现由JDBC切换到HIbernate?
Spring的IOC底层实现:
原来的方法:用工厂模式取代面向接口,降低了接口与实现类之间的耦合。原来改很多类,现在改一个工厂类,但是依然和工厂之间有耦合。
解决方案:工厂+反射 + 配置文件实现解耦合,通过解析xml与反射,生成实例。改动只需要修改配置文件即可。
Spring的方式:
将接口和实现类交给Spring管理:
创建配置文件:applicationContext.xml
约束所在文件位置:Spring/spring-framework-4.2.4.RELEASE/docs/spring-framework-reference/html/xsd-configuration.html
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation=" 5 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 <!-- Spring的入门配置 --> 7 <bean id="UserDao" class="com.itheima.spring.demo1.UserDaoImpl"></bean> 8 9 </beans>
编写测试类:
如果要更改底层实现,只需改配置文件:
<bean id="UserDao" class="com.itheima.spring.demo1.UserDaoImpl"></bean>
-->
<bean id="UserDao" class="com.itheima.spring.demo1.UserDaoHibernateImpl"></bean>
结果: