下面使用的 spring-3.0版本来演示
目标任务
1.配置最简单的,spring 应用
2.使用spring管理ServiceBean
3.手动编写代码 模拟 spring的初始工作
1.首先来看 spring 应用中最基本的jar
2.spring的配置文件 (可以从spring的文档中拷贝,或者 spring自带的 案例中拷贝)
3.就这样 我们就可以 来初始化 spring 容器 编写单元测试
//上面 如果测试单元没有问题 就说明 spring 框架 使用成功 !! 恭喜 !!
4.下面 来看 使用 spring容器来管理我们的 bean (首先定义bean--->然后配置)
5.在spring配置文件中配置
6.测试
//如果能在控制台 打印出 "我就是save方法!" 恭喜成功!
7.看了上面这么多 那么spring到底怎么初始化 和 管理的 我们的bean呢? 我们自己来模拟写一个 spring的 init 初始工作 (使用 dom4j 来读取配置文件 -->使用 反射来创建对象)
8.首先加入 dom4j-1.6.1.jar 和 jaxen.jar(dom4j需要的一个jar)
9.定义隐射spring配置文件bean 的类
10.定义 我们自己的 读取spring配置文件中的 ClassPathXmlApplicationContext 类
11.好啦 我们来测试吧
//如果 同样看到 "我就是save方法!" 我想 你应该对spring有所了解了吧?? 嘻嘻
//睡觉啦 呵呵 88
目标任务
1.配置最简单的,spring 应用
2.使用spring管理ServiceBean
3.手动编写代码 模拟 spring的初始工作
1.首先来看 spring 应用中最基本的jar

2.spring的配置文件 (可以从spring的文档中拷贝,或者 spring自带的 案例中拷贝)
<?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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd "> </beans>
3.就这样 我们就可以 来初始化 spring 容器 编写单元测试
package junit.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
@Test //测试 spring的 初始化
public void init(){
ApplicationContext context=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
//上面 如果测试单元没有问题 就说明 spring 框架 使用成功 !! 恭喜 !!
4.下面 来看 使用 spring容器来管理我们的 bean (首先定义bean--->然后配置)
package com.person.service;
public interface PersonService {
public void save();
}
package com.person.service.impl;
import com.person.service.PersonService;
public class PersonServiceBean implements PersonService {
public void save(){
System.out.println("我就是save方法!");
}
}
5.在spring配置文件中配置
<?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/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">
<!-- 这里配置后 就会有 spring来管理, 注意id 和name 的区别 -->
<bean id="personService" class="com.person.service.impl.PersonServiceBean">
</bean>
</beans>
6.测试
package junit.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.person.service.PersonService;
public class SpringTest {
@Test //测试 spring的 初始化
public void init(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
//方法一 获取服务层对象
PersonService personService=(PersonService)ctx.getBean("personService");
//方法二
PersonService personService1=ctx.getBean("personService",PersonService.class);
personService.save();
personService1.save();
}
}
//如果能在控制台 打印出 "我就是save方法!" 恭喜成功!
7.看了上面这么多 那么spring到底怎么初始化 和 管理的 我们的bean呢? 我们自己来模拟写一个 spring的 init 初始工作 (使用 dom4j 来读取配置文件 -->使用 反射来创建对象)
8.首先加入 dom4j-1.6.1.jar 和 jaxen.jar(dom4j需要的一个jar)
9.定义隐射spring配置文件bean 的类
package junit.test;
/**
* 定义 保存 spring配置文件中的bean对象
* @author Bin
*/
public class BeanDefinition {
private String id; //对应 spring配置文件中的id
private String className; //对应 spring配置文件中的class
//get set
// 构造方法
}
10.定义 我们自己的 读取spring配置文件中的 ClassPathXmlApplicationContext 类
package junit.test;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
import com.sun.xml.internal.fastinfoset.stax.events.Util;
/*
* 来模拟spring 的工作
*/
public class MySpringClassPathXmlApplicationContext {
//保存 配置文件中的 bean 的信息
private List<BeanDefinition> beandefines=new ArrayList<BeanDefinition>();
//保存初始化 后的对象
private Map<String,Object> sigletons=new HashMap<String,Object>();
public MySpringClassPathXmlApplicationContext(String fileName) {
this.readXml(fileName);
this.instanceBean();
}
/**==================
* 读取xml配置文件
* ==================
* @author Bin
* @param fileName
*/
private void readXml(String fileName) {
SAXReader saxReader=new SAXReader();
Document doucment=null;
try {
URL xmlPath=this.getClass().getClassLoader().getResource(fileName);
doucment=saxReader.read(xmlPath);
Map<String,String> nsMap=new HashMap<String,String>();
//给spring配置文件的命名空间 一个别名 ns
nsMap.put("ns","http://www.springframework.org/schema/beans"); //加入命名空间 xmlns: spring配置文件中的
XPath xsub=doucment.createXPath("//ns:beans/ns:bean"); //创建 beans/bean 查询路径
xsub.setNamespaceURIs(nsMap); //设置命名空间
List<Element> beans=xsub.selectNodes(doucment); //获取文档下的所有bean节点
for (Element element : beans) {
String id=element.attributeValue("id"); //获取 id的属性值
String clazz=element.attributeValue("class"); // 获取 class属性
//类是 spring中的 : org.springframework.beans.factory.config.BeanDefinition;
BeanDefinition beandefine=new BeanDefinition(id,clazz);
beandefines.add(beandefine);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**===================================
* 完成Bean 的实例化
* ===================================
* @author Bin
*/
private void instanceBean() {
for (BeanDefinition beandefine : beandefines) {
try {
if(!Util.isEmptyString(beandefine.getClassName()))
sigletons.put(beandefine.getId(), Class.forName(beandefine.getClassName().trim()).newInstance());
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**=======================
* 获取bean
* =====================
* @param beanName
* @return
*/
public Object getBean(String beanName){
return this.sigletons.get(beanName);
}
}
11.好啦 我们来测试吧
@Test //测试 自定义的spring 模拟器
public void testMySpring(){
MySpringClassPathXmlApplicationContext ctx=new MySpringClassPathXmlApplicationContext("applicationContext.xml");
//方法一 获取服务层对象
PersonService personService=(PersonService)ctx.getBean("personService");
personService.save();
}
//如果 同样看到 "我就是save方法!" 我想 你应该对spring有所了解了吧?? 嘻嘻
//睡觉啦 呵呵 88