工厂模式--模拟spring的bean工厂beanFactory
来源:互联网 发布:初中教学软件下载 编辑:程序博客网 时间:2024/05/17 22:46
今天咱们自己写一个工程用于模拟spring的bean工厂,在spring中我们可以把类配置到applicationContext.xml文件中,然后就可以从beanFactoy中取出这个类的对象,这里需要用得到java中xml的解析技术,常用的有四种解析技术,我们这里用到的是jdom解析,首先需要在jdom的官网上www.jdom.org下载jdom的jar文件,把lib下的全部jar包引进和jdom.jar这个核心jar包引进就OK了.
下面直接上代码
交通工具接口
package com.soukenan.spring.factory;
public interface Vehicle {
public void run();
}
两个实现了这个接口的类
汽车类
package com.soukenan.spring.factory;
public class Car implements Vehicle{
@Override
public void run() {
System.out.println("我有四个轱辘,我可以跑的很快,,,,,,,");
}
}
火车类
package com.soukenan.spring.factory;
public class Train implements Vehicle{
@Override
public void run() {
System.out.println("我有很多的轱辘,我可以跑的非常非常的快,,,,,,");
}
}
spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans >
<bean id="car" class="com.soukenan.spring.factory.Car"></bean>
<bean id="train" class="com.soukenan.spring.factory.Train"></bean>
</beans>
BeanFactory接口
package com.soukenan.spring.factory;
public interface BeanFactory {
public Object getBean(String id);
}
实现了该接口的ClassPathXmlApplicationContext类
package com.soukenan.spring.factory;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.xpath.XPath;
public class ClassPathXmlApplicationContext implements BeanFactory {
public Map<String,Object> container = new HashMap<String,Object>();
public ClassPathXmlApplicationContext(String path) throws Exception{
SAXBuilder sb = new SAXBuilder(); www.2cto.com
Document doc = sb.build(this.getClass().getClassLoader().getResourceAsStream(path));
Element root = doc.getRootElement();
List list = XPath.selectNodes(root, "/beans/bean");
for (int i = 0; i < list.size(); i++) {
Element bean = (Element) list.get(i);
String id = bean.getAttributeValue("id");
String className = bean.getAttributeValue("class");
Object o = Class.forName(className).newInstance();
container.put(id, o);
}
}
@Override
public Object getBean(String id) {
return this.container.get(id);
}
}
各个文件的目录
测试主类
package com.soukenan.spring.factory;
import java.io.IOException;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws IOException, InstantiationException, IllegalAccessException, Exception{
BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext.xml");
Vehicle v = (Vehicle) bf.getBean("car");
v.run();
}
}
0 0
- 3,工厂模式--模拟spring的bean工厂beanFactory
- 工厂模式--模拟spring的bean工厂beanFactory
- 工厂模式---模拟Spring的Bean工厂
- Spring 之 BeanFactory Bean工厂
- 模拟Spring 的bean工厂模式与自动装配
- 工厂模式模拟Spring的bean加载过程
- 模拟实现spring的bean工厂
- Spring的Bean工厂
- [Java] 设计模式之工厂系列 04 (自定义模拟 spring 读取xml文件 beanFactory)
- 用dom4j读取配置文件来模拟spring的bean工厂
- 工程模式 JDom读取xml模拟Sping的Bean工厂
- 理解Spring的Bean工厂
- 理解Spring的Bean工厂
- Spring学习笔记一: Bean工厂(BeanFactory )与应用上下文(ApplicationContext)BeanFactory
- Spring--IoC--Bean的装配--工厂方法设计模式
- Spring使用工厂模式配置bean的三种方式
- 设计模式——之工厂模式 笔记(理解Spring的Bean工厂)
- spring bean工厂和bean的id
- 简单介绍PHP获取文件属性方法
- poj 1160
- ios自带的json对请求数据进行解析
- _T() 函数
- CLI/C++中混合类的使用
- 工厂模式--模拟spring的bean工厂beanFactory
- JSTL 核心标签库 使用
- Delphi 参数传递
- 启动JDeveloper内存监控
- 自然语言处理的有关的链接
- android监控网络状态变化防止多次广播的一种解决办法
- 【转载】 CBitmap,HBitmap,Bitmap区别及联系
- extern "C"
- 2014年互联网IT公司产品、技术类人员工资待遇大全