⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servicefactory.java

📁 oa办公系统
💻 JAVA
字号:
/**
 * FileName:ServiceFactory.java,v 1.0 created in 2008-11-5 下午02:50:03
 * Created by sean
 * Copyright (c) 2008 wanczy
 * All Rights Reserved.
 */
package cn.jx.ecjtu.oa.services;

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

/**
 * 业务层的工厂,负责生成业务层接口对应的实例
 * 
 * @author sean
 * @version $Revision: 1.2 $
 * @since 1.0
 */
public class ServiceFactory {
	private static ResourceBundle BUNDLE = ResourceBundle
			.getBundle("cn.jx.ecjtu.oa.services.services");

	private static Map<Class, Object> services = new HashMap<Class, Object>();
	
	public static synchronized Object getService(Class interfaceClass) {
		Object service = services.get(interfaceClass);
		if (service == null) {
			String interfaceName = interfaceClass.getName();// 取得接口类的全限定名
			String implClassName = BUNDLE.getString(interfaceName);// 通过接口类的全限定名,到service.properties文件中,查找到实现类的全限定名
			// System.out.println(implClassName);
			try {
				Class clazz = Class.forName(implClassName);// 建立全限定名指定的类的描述类实例
				service = clazz.newInstance();// 通过描述实例建立指定的类的一个实例
				services.put(interfaceClass, service);// 将实例化的业务层类缓存起来,以便下一次调用的时候直接取出来使用
			} catch (ClassNotFoundException e) {
				throw new RuntimeException("接口实现类" + implClassName + "找不到", e);
			} catch (InstantiationException e) {
				throw new RuntimeException("接口实现类" + implClassName + "初始化错误", e);
			} catch (IllegalAccessException e) {
				throw new RuntimeException("接口实现类" + implClassName
						+ "构造时,错误的调用方式", e);
			}
		}
		return service;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -