All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xiaoleilu.hutool.lang.Singleton Maven / Gradle / Ivy

There is a newer version: 3.3.2
Show newest version
package com.xiaoleilu.hutool.lang;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.xiaoleilu.hutool.util.ClassUtil;
import com.xiaoleilu.hutool.util.ReflectUtil;

/**
 * 单例类
* 提供单例对象的统一管理,当调用get方法时,如果对象池中存在此对象,返回此对象,否则创建新对象返回 * @author loolly * */ public final class Singleton { private static Map, Object> pool = new ConcurrentHashMap, Object>(); private Singleton() {} /** * 获得指定类的单例对象
* 对象存在于池中返回,否则创建,每次调用此方法获得的对象为同一个对象
* * @param 单例对象类型 * @param clazz 类 * @param params 构造方法参数 * @return 单例对象 */ @SuppressWarnings("unchecked") public static T get(Class clazz, Object... params) { T obj = (T) pool.get(clazz); if(null == obj) { synchronized(Singleton.class) { obj = (T) pool.get(clazz); if(null == obj) { obj = ReflectUtil.newInstance(clazz, params); pool.put(clazz, obj); } } } return obj; } /** * 获得指定类的单例对象
* 对象存在于池中返回,否则创建,每次调用此方法获得的对象为同一个对象
* * @param 单例对象类型 * @param className 类名 * @param params 构造参数 * @return 单例对象 */ public static T get(String className, Object... params) { final Class clazz = ClassUtil.loadClass(className); return get(clazz, params); } /** * 移除指定Singleton对象 * @param clazz 类 */ public static void remove(Class clazz) { pool.remove(clazz); } /** * 清除所有Singleton对象 */ public static void destroy() { pool.clear(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy