A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 825176857 中级黑马   /  2015-7-15 22:45  /  278 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


public final class SimpleObjectFactory {
    private static final Logger logger = Logger.getLogger(SimpleObjectFactory.class);
    private static final Lock LOCK = new ReentrantLock();
    private static final ConcurrentHashMap<String, Object> OBJ_CACHE = new ConcurrentHashMap<String, Object>(16);

    /**
     * 需要一个无参构造函数
     *
     * @param cls
     * @return
     */
    public static <T> T createInstance(Class<T> cls) {
        String classStr = cls.getCanonicalName();
        return createInstance(classStr);
    }

    @SuppressWarnings("unchecked")
    public static <T> T createInstance(String classStr) {
        if (StringUtils.isBlank(classStr)) {
            return null;
        }

        logger.debug(classStr);

        if (OBJ_CACHE.get(classStr) != null) {
            return (T) OBJ_CACHE.get(classStr);
        }

        try {
            LOCK.lock();
            if (OBJ_CACHE.get(classStr) != null) {
                return (T) OBJ_CACHE.get(classStr);
            }

            logger.info("Create The " + classStr + " instance.");

            T instance = (T) Class.forName(classStr).newInstance();
            OBJ_CACHE.putIfAbsent(classStr, instance);
            return instance;

        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            logger.error(e.getMessage());
            return null;
        } finally {
            LOCK.unlock();
        }

    }

    public static void main(String[] args) {
        
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马