📄 servicelocator.java
字号:
package org.helpsoft.servicelocator;
import org.helpsoft.exception.*;
import org.helpsoft.session.*;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import com.helpsoft.util.log.LogService;
import com.helpsoft.util.log.Logger;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
/**
* The Service Locator maps an interface to an implementation.
* See:
* http://java.sun.com/blueprints/corej2eepatterns/Patterns/ServiceLocator.html
*
* @author cao guangxin - www.relationinfo.com
* @version $Revision: 1.4 $, $Date: 2005/02/02 17:19:03 $
*/
public class ServiceLocator {
/**
* the logger.
*/
private static Logger log = LogService.getLogger(ServiceLocator.class);
/**
* The AssociatorManageService name.
*/
public static final String ASSOCIATORMANAGE_SERVICE = "ASSOCIATORMANAGE_SERVICE";
/**
* Contains the class constants
*/
private static HashMap map;
/**
* Contains the classname of the implementation class.
*/
private static Map serviceInfoMap;
/**
* Contains the interface name of the service.
*/
private static Map serviceInterfaceMap;
/**
* Contains the instantiated services.
*/
private static Map serviceMap;
/**
* property.
*/
static Properties props = null;
/**
* Read the service properties.
*/
static {
props = ServicePropertyReader.getProperties();
serviceInfoMap = new HashMap();
serviceMap = new HashMap();
serviceInterfaceMap = new HashMap();
serviceInfoMap.put(ASSOCIATORMANAGE_SERVICE,
props.getProperty(ASSOCIATORMANAGE_SERVICE));
serviceInterfaceMap.put(ASSOCIATORMANAGE_SERVICE,
"org.helpsoft.session.AssociatorManageService");
}
/**
* Locate a Service implementation by passing the Name of the service. The
* getService() method will initalize an implementation of the service.
*
* @param serviceName de naam van de service
* @return Een Implementatie van de gespecificeerde service.
* @throws UnknownServiceException de exceptie
* @throws ServiceInstantiationException de exceptie
*/
public static LocatableService getService(String serviceName)
throws UnknownServiceException,
ServiceInstantiationException {
log.debug("Locating service for " + serviceName);
//see if there is a initialized
LocatableService service = (LocatableService) serviceMap.get(serviceName);
if (service != null) {
return service;
} else {
//get service for the first time
String className = (String) serviceInfoMap.get(serviceName);
log.debug("Found service " + className);
String interfaceName = (String) serviceInterfaceMap.get(serviceName);
log.debug("Found service " + interfaceName);
if (className != null) {
try {
log.debug("Use classloader to find class: " + interfaceName);
Class theServiceInterface = Class.forName(interfaceName);
log.debug("Use classloader to find class: " + className);
Class theDelegateClass = Class.forName(className);
log.debug("Create a new instance of the loaded class.");
try {
log.debug("Create a new instance of the loaded class.");
service = (LocatableService) theDelegateClass.newInstance();
} catch (Exception e) {
log.debug("Create a dynamic proxy for the loaded class.");
service = (LocatableService) Proxy.newProxyInstance(theServiceInterface.getClassLoader(), new Class[]{theServiceInterface, LocatableService.class}, (InvocationHandler) theDelegateClass.newInstance());
}
service.init();
log.debug("The service was initialized");
serviceMap.put(serviceName, service);
log.debug("The service was put in the map");
return service;
} catch (Exception e) {
log.error("Error instantiating the service", e);
throw new ServiceInstantiationException(e);
}
}
throw new UnknownServiceException("Service not found:" + serviceName);
}
}
/**
* Determines a list of all constants using reflection and put them in a hashmap.
*
* @return HashMap with the names of all constants and their String values.
*/
public synchronized static HashMap getConstants() {
if (map != null) {
return map;
}
map = new HashMap();
Field fields[] = null;
try {
fields = ServiceLocator.class.getDeclaredFields();
}
catch (SecurityException e) {
e.printStackTrace();
return new HashMap();
}
if (fields != null) {
if (fields.length != 0) {
for (int i = 0; i < fields.length; i++) {
if (Modifier.isPublic(fields[i].getModifiers())
&& Modifier.isFinal(fields[i].getModifiers())
&& Modifier.isStatic(fields[i].getModifiers())
) {
// It's a constant!
try {
map.put(fields[i].getName(), fields[i].get(null));
}
catch (Exception e) {
e.printStackTrace();
return new HashMap();
}
}
}
}
}
return map;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -