前言:前几天看一篇文章,大意是说应该为自己写一本书,通过写书,你会对某一问题理解的更全面,更透彻。想了几天,决定把自己学习spring的过程记录下来,看似简单的几行代码,写成一篇文章,还真费了不少时间。以前学习的时候对照着书敲代码,输出结果就感觉OK,写这篇文章的时候整体的轮廓逐渐清晰,有了全面的认识,书中许多页说明的内容精炼为几句话。
1 环境准备
1.1 下载spring spring-framework-3.2.2.RELEASE-dist
解压到路径:spring-framework-3.2.2.RELEASE
1.2 新建JAVA项目
1.3 导入相关JAR包
1.3.1 spring 包
spring-core-3.2.2.RELEASE.jar
spring-beans-3.2.2.RELEASE.jar
1.3.2 log包 ,spring的日志使用了log4j,需要导入相关包。
log4j-1.2.8.jar.jar
commons-logging-1.0.4.jar
commons-logging-api-1.1.jar
2 第一个项目
说明:SPING的第一个功能,IOC(控制反转)或DI(依赖注入)
Martin Fowler 在2004年的一篇论文中提到:控制的什么方面被反转了?他总结说是获得依赖对象的方式反转了。有点抽象,先看代码再理解。
2.1 需求:向控制台输出:某人说:你好,spring!
2.2 相关程序
2.2.1 接口:IHello.java
2.2.2 实现类:CHello.java
2.3.3 spring配置文件 : hello.xml
2.3.4 应用类:HelloAppSpring.java
3 实现代码
3.1 接口:IHello.java
package cuigh.spring.ioc.hello;
/*
* 功能:定义一个接口,与实现分离,业务逻辑在接口中定义,在实现类中实现。
* */
public interface IHello {
/*
* 功能:某人说:你好,spring!
* 参数:某人
* 返回:无
* */
public void sayHello(String name);
}
3.2 实现类:CHello.java
package cuigh.spring.ioc.hello;
/*
* 功能:实现接口IHello功能。
* */
public class CHello implements IHello {
/*
* 功能:向控制台输出一句话,某人说:你好,spring!
* 参数:某人
* 返回:无
* */
@Override
public void sayHello(String name) {
System.out.println(name+"说:你好,spring!");
}
}
3.3 spring配置文件 : hello.xml
<?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-2.0.xsd">
<!-- 说明:
1 实现类定义
2 容易出错的地方为拼写错误,建议采用复制、粘贴,避免不必要的错误
-->
<bean id="hello"
class="cuigh.spring.ioc.hello.CHello">
</bean>
</beans>
3.4 应用类:HelloAppSpring.java
package cuigh.spring.ioc.hello;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
@SuppressWarnings("deprecation")
public class HelloAppSpring {
public static void main(String[] args) throws Exception {
//使用步骤:1 构造一个Resource对象,参数为配置文件,本例中为:hello.xml
String fileName = System.getProperty("user.dir")+"\\bin\\cuigh\\spring\\ioc\\hello\\"
+"hello.xml";
Resource resource = new FileSystemResource(fileName);
//使用步骤:2 获得 BeanFactory
BeanFactory factory = new XmlBeanFactory(resource);
//使用步骤:3 通过Beanfactory获得实现类的实例,本例中为cuigh.spring.ioc.hello.CHello
//相当于:IHello hello = new cuigh.spring.ioc.hello.CHello();
IHello hello = (IHello) factory.getBean("hello");
//用步骤:4 调用业务方法,本例中为 sayHello("张三")
hello.sayHello("张三");
}
}
总结:
在HelloAppSpring.java中依赖的类cuigh.spring.ioc.hello.CHello通过
SPRING注入。