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

📄 service.java

📁 kaffe Java 解释器语言,源码,Java的子集系统,开放源代码
💻 JAVA
字号:
/* *	Service.java *//* *  Copyright (c) 2000 by Matthias Pfisterer <Matthias.Pfisterer@gmx.de> * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU Library General Public License as published *   by the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU Library General Public License for more details. * *   You should have received a copy of the GNU Library General Public *   License along with this program; if not, write to the Free Software *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */package	org.tritonus.core;import	java.util.ArrayList;import	java.util.Collection;import  java.util.Enumeration;import	java.util.Iterator;import  java.util.List;import	java.util.Set;import	java.io.BufferedReader;import	java.io.InputStream;import	java.io.InputStreamReader;import	java.io.IOException;import	java.net.URL;import	org.tritonus.share.TDebug;import	org.tritonus.share.ArraySet;public class Service{	private static final String	BASE_NAME = "META-INF/services/";	/**	Determines if the order of service providers is reversed.		If this is true, the Iterator returned by providers(Class)		iterates through the service provider classes backwards.		This means that service providers that are in the user class		path are first, then service providers in the extension class		path, then those in the boot class path.		This behaviour has the advantage that 'built-in' providers		(those in the boot class path) can be 'shadowed' by		providers in the extension and user class path.	 */	private static final boolean	REVERSE_ORDER = true;	public static Iterator providers(Class cls)	{		if (TDebug.TraceService) { TDebug.out("Service.providers(): begin"); }		String	strFullName = BASE_NAME + cls.getName();		if (TDebug.TraceService) { TDebug.out("Service.providers(): full name: " + strFullName); }		List	instancesList = createInstancesList(strFullName);		Iterator	iterator = instancesList.iterator();		if (TDebug.TraceService) { TDebug.out("Service.providers(): end"); }		return iterator;	}	private static List createInstancesList(String strFullName)	{		if (TDebug.TraceService) { TDebug.out("Service.createInstancesList(): begin"); }		List	providers = new ArrayList();		Iterator	classNames = createClassNames(strFullName);		if (classNames != null)		{			while (classNames.hasNext())			{				String	strClassName = (String) classNames.next();				if (TDebug.TraceService) { TDebug.out("Service.createInstancesList(): Class name: " + strClassName); }				try				{					ClassLoader	systemClassLoader = ClassLoader.getSystemClassLoader();					Class	cls = Class.forName(strClassName, true, systemClassLoader);					if (TDebug.TraceService) { TDebug.out("Service.createInstancesList(): now creating instance of " + cls); }					Object	instance = cls.newInstance();					if (REVERSE_ORDER)					{						providers.add(0, instance);					}					else					{						providers.add(instance);					}				}				catch (ClassNotFoundException e)				{					if (TDebug.TraceService || TDebug.TraceAllExceptions) { TDebug.out(e); }				}				catch (InstantiationException e)				{					if (TDebug.TraceService || TDebug.TraceAllExceptions) { TDebug.out(e); }				}				catch (IllegalAccessException e)				{					if (TDebug.TraceService || TDebug.TraceAllExceptions) { TDebug.out(e); }				}				catch (Throwable e)				{					if (TDebug.TraceService || TDebug.TraceAllExceptions) { TDebug.out(e); }				}			}		}		if (TDebug.TraceService) { TDebug.out("Service.createInstancesList(): end"); }		return providers;	}	private static Iterator createClassNames(String strFullName)	{		if (TDebug.TraceService) { TDebug.out("Service.createClassNames(): begin"); }		Set	providers = new ArraySet();		Enumeration	configs = null;		try		{			configs = ClassLoader.getSystemResources(strFullName);		}		catch (IOException e)		{			if (TDebug.TraceService || TDebug.TraceAllExceptions) { TDebug.out(e); }		}		if (configs != null)		{			while (configs.hasMoreElements())			{				URL	configFileUrl = (URL) configs.nextElement();				if (TDebug.TraceService) { TDebug.out("Service.createClassNames(): config: " + configFileUrl); }				InputStream	input = null;				try				{					input = configFileUrl.openStream();				}				catch (IOException e)				{					if (TDebug.TraceService || TDebug.TraceAllExceptions) { TDebug.out(e); }				}				if (input != null)				{					BufferedReader	reader = new BufferedReader(new InputStreamReader(input));					try					{						String	strLine = reader.readLine();						while (strLine != null)						{							strLine = strLine.trim();							int	nPos = strLine.indexOf('#');							if (nPos >= 0)							{								strLine = strLine.substring(0, nPos);							}							if (strLine.length() > 0)							{								providers.add(strLine);								if (TDebug.TraceService) { TDebug.out("Service.createClassNames(): adding class name: " + strLine); }							}							strLine = reader.readLine();						}					}					catch (IOException e)					{						if (TDebug.TraceService || TDebug.TraceAllExceptions) { TDebug.out(e); }					}				}			}		}		Iterator	iterator = providers.iterator();		if (TDebug.TraceService) { TDebug.out("Service.createClassNames(): end"); }		return iterator;	}}/*** Service.java ***/

⌨️ 快捷键说明

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