【从零开始学Spring笔记】IoC的XML开发
大家可以关注作者的账号,关注从零开始学Spring笔记文集。也可以根据目录前往作者的博客园博客进行学习。本片文件将基于黑马程序员就业班视频进行学习以及资料的分享,并记录笔记和自己的看法。欢迎大家一起学习和讨论。
【从零开始学Spring笔记】Spring学习路线
什么是IoC
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来降低代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
简单来说就是将创建对象的权力反转给Spring。
下载Spring的开发包
官网:http://spring.io/,朋友们可以去官网也在。同时作者已经下好,并且上次百度云盘,如果想下载的朋友们可以去本系列文集的第一篇【从零开始学Spring笔记】Spring学习路线中寻找。
下载后解压如图
docs :Spring的开发规范和API
libs :Spring的开发的jar和源码
schema :Spring的配置文件的约束
IoC的原理
传统的方式我们在使用接口或者对象时都需要new一个对象出来,如果想要更改对象,例如底层的方法,需要重新new,十分复杂,并且耦合性高。而spring通过工厂+反射+配置文件的方法实现了程序的解耦合,而且只需要修改配置文件即可实现底层的更换。
创建项目测试
第一步:创建web项目,引入jar包
可以在刚刚下载解压后的libs文件夹中寻找,但有的不在此包内,比较难找。所以上传到百度云了,下载即可。下载链接在本系列文集的第一篇【从零开始学Spring笔记】Spring4学习路线中寻找。
第二步:创建类和接口
package com.tyust.spring.demo01;
/*
* 用户管理DAO接口
*/
public interface UserDAO {
public void save();
}
package com.tyust.spring.demo01;
/*
* 用户管理DAO实现类
*/
public class UserDAOImpl implements UserDAO {
@Override
public void save() {
System.out.println("UserDAOImpl执行了...");
}
}
package com.tyust.spring.demo01;
/*
* 用户管理DAOHibernate实现类
*/
public class UserDAOHibernateImpl implements UserDAO {
@Override
public void save() {
System.out.println("UserDAOHibernateImpl执行了...");
}
}
第三步:将实现类交给Spring管理
在spring的解压路径下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html
打开找到(在最下面),复制选中部分,进行配置文件的编写
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Spring的配置文件=============== -->
<bean id = "UserDAO" class = "com.tyust.spring.demo01.UserDAOHibernateImpl"></bean>
</beans>
第四步:编写测试类
package com.tyust.spring.demo01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/*
* 测试类
*/
public class SpringDemo1 {
public static void main(String[] args) {
demo2();
}
/**
* 传统的调用方法
*/
public void demo1() {
UserDAO ud = new UserDAOImpl() ;
ud.save();
}
/*
* Spring的调用方法
*/
public static void demo2() {
//ClassPathXmlApplicationContext是配置文件的路径,applicationcontext.xml是配置文件的名称
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationcontext.xml");
UserDAO ud = (UserDAO) applicationContext.getBean("UserDAO");
ud.save();
}
}
第五步:输出结果
如果想要更换底层,只需要更改配置文件中的class即可。
IOC和DI
IOC:控制反转,将对象的创建权反转给了Spring。
DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
1.依赖
Class A{}
Class B{
public void xxx(A a){ }
}
2.继承:is a
Class A{}
Class B extends A{}
3.聚合:has a
还是上面的例子,如果UserDAO的实现类有自己的属性,并在语句中输出
package com.tyust.spring.demo01;
/*
* 用户管理DAOHibernate实现类
*/
public class UserDAOHibernateImpl implements UserDAO {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void save() {
System.out.println("UserDAOHibernateImpl执行了..."+name);
}
}
使用传统的方法就必须放弃面向接口编程,需要对实现类实例化才能赋值
/**
* 传统的调用方法
*/
public void demo1() {
UserDAOHibernateImpl ud = new UserDAOHibernateImpl() ;
ud.setName("张飞");
ud.save();
}
但是使用Spring,就可以用关键字property进行配置。
<!-- Spring的配置文件=============== -->
<bean id = "UserDAO" class = "com.tyust.spring.demo01.UserDAOHibernateImpl">
<property name="name" value="刘备"></property>
</bean>