📄 servicefactory.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 + -