2.工厂BeanFactory类,读取工厂配置文件的数据,创建Dao对象,Manager对象

原创 2011年10月13日 19:58:17
package com.bjpowernode.drp.util;

import java.util.HashMap;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.bjpowernode.drp.basedata.dao.ItemDao;
import com.bjpowernode.drp.basedata.manager.ItemManager;

/**
 * 抽象工厂,主要创建两个系列的产品:
 *   1、Manager系列
 *   2、Dao系列产品
 * @author Administrator
 *
 */
public class BeanFactory {

	private static BeanFactory instance = new BeanFactory();
	
	private final String beansConfigFile = "beans-config.xml";
	
	//保存Service相关对象
	private Map serviceMap = new HashMap();
	
	//保存Dao相关对象
	private Map daoMap = new HashMap();
	
	private Document doc;
	
	private BeanFactory() {
		try {
			doc = new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
		} catch (DocumentException e) {
			e.printStackTrace();
			throw new RuntimeException();
		}
	}
	
	public static BeanFactory getInstance() {
		return instance;
	}
	
	/**
	 * 根据产品编号取得Service系列产品
	 * @param beanId
	 * @return
	 */
	public synchronized Object getServiceObject(Class c){
		//如果存在相关对象实例,返回
		if (serviceMap.containsKey(c.getName())) {
			return serviceMap.get(c.getName());
		}
		Element beanElt = (Element)doc.selectSingleNode("//service[@id=\"" + c.getName() + "\"]");
		String className = beanElt.attributeValue("class");
		Object service = null;
		try {
			service = Class.forName(className).newInstance();
		
			//将创建好多的对象放到Map中
			serviceMap.put(c.getName(), service);
		} catch (Exception e) {
			throw new RuntimeException();
		}
		return service;
	}
	
	/**
	 * 根据产品编号取得Service系列产品
	 * @param beanId
	 * @return
	 */
	public synchronized Object getDaoObject(Class c){
		//如果存在相关对象实例,返回
		if (daoMap.containsKey(c.getName())) {
			return daoMap.get(c.getName());
		}
		Element beanElt = (Element)doc.selectSingleNode("//dao[@id=\"" + c.getName() + "\"]");
		String className = beanElt.attributeValue("class");
		Object dao = null;
		try {
			dao = Class.forName(className).newInstance();
			
			//将创建好多的对象放到Map中
			daoMap.put(c.getName(), dao);
		} catch (Exception e) {
			throw new RuntimeException();
		}
		return dao;
	}
	
	public static void main(String[] args) {
		//ItemManager itemManager = (ItemManager)BeanFactory.getInstance().getServiceObject("itemManager");
		//System.out.println(itemManager);
		//ItemDao itemDao = (ItemDao)BeanFactory.getInstance().getDaoObject("com.bjpowernode.drp.basedata.dao.ItemDao");
		ItemDao itemDao = (ItemDao)BeanFactory.getInstance().getDaoObject(ItemDao.class);
		System.out.println(itemDao);
	}
}

 

R语言从入门到精通系列之数据对象

-
  • 1970年01月01日 08:00

Spring获取bean工厂的两种方法

从ApplicationContex 应用上下文容器中获取bean和从bean工厂容器中获取bean 具体案例: //从ApplicationContext中取bean ApplicationC...
  • binbin199604
  • binbin199604
  • 2017-04-13 09:46:57
  • 641

Spring学习笔记一: Bean工厂(BeanFactory )与应用上下文(ApplicationContext)BeanFactory

bean工厂:最简单的容器,提供了基础的依赖注入支持。创建各种类型的Bean. 应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务。beans包提供了以...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2016-07-14 20:19:01
  • 2354

用简单工厂来创建对象和用new创建对象相比好处有哪些

转自百度知道: 用简单工厂来创建对象和用new创建对象相比好处有哪些? 我不知道你认真研究过设计模式没有?之所以要使用模式思想,是因为要遵循开闭原则,开闭原则就是对修改关闭对扩展开...
  • jamesge2010
  • jamesge2010
  • 2017-02-22 23:23:30
  • 471

Java Dao工厂设计模式

这里简要说明Java中的分层设计思想。如下图所示: 将功能的实现分在两层进行,访问层和业务层。 (1)设计IDao接口 package web.java.xml.model; public i...
  • tao_sun
  • tao_sun
  • 2013-06-01 09:42:35
  • 2198

Spring Bean工厂创建Bean实例的方法之使用静态工厂类

定义接口: package Bean.staticFactoryBean;public interface Axe ...{   public String chop();}package Bean....
  • daryl715
  • daryl715
  • 2007-03-23 17:21:00
  • 3880

spring中通过静态工厂方法获取bean实例化对象

1:bean package com.study.spel; public class Car {      private String brand; private String...
  • pangqiandou
  • pangqiandou
  • 2016-11-20 14:29:29
  • 1984

spring通过工厂方法和FactoryBean来配置Bean

spring通过工厂方法配置Bean 1.通过调用静态工厂方法创建bean(直接调用某一个类的静态方法就可以返回bean的实例) 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当...
  • Mrwuyi
  • Mrwuyi
  • 2016-06-03 14:30:36
  • 3670

(设计模式)简单工厂模式之通过配置文件动态创建实现类

通常我们在使用简单工厂模式的时候会由创建方法create通过传入的参数来判断要实例化哪个对象,就像下面这样: public static class ImageSelectFactory { ...
  • u011064099
  • u011064099
  • 2015-11-04 14:44:29
  • 1731

Object Factories(对象工厂)

浅谈C++泛型编程与设计模式---对象工厂
  • zjq2008wd
  • zjq2008wd
  • 2015-02-13 15:03:44
  • 1391
收藏助手
不良信息举报
您举报文章:2.工厂BeanFactory类,读取工厂配置文件的数据,创建Dao对象,Manager对象
举报原因:
原因补充:

(最多只允许输入30个字)