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

com.github.houbb.asm.tool.reflectasm.method.MethodAccessCache Maven / Gradle / Ivy

package com.github.houbb.asm.tool.reflectasm.method;

import com.esotericsoftware.reflectasm.MethodAccess;
import com.github.houbb.heaven.annotation.ThreadSafe;
import com.github.houbb.heaven.support.cache.ICache;
import com.github.houbb.heaven.util.lang.ObjectUtil;

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

/**
 * 方法访问 cache
 * @author binbin.hou
 * @since 0.0.3
 */
@ThreadSafe
public class MethodAccessCache implements ICache {

    /**
     * 单例
     * @since 0.0.3
     */
    private static final MethodAccessCache INSTANCE = new MethodAccessCache();

    /**
     * access map
     * @since 0.0.3
     */
    private static final Map ACCESS_MAP = new ConcurrentHashMap<>();

    /**
     * 获取单例
     * @return 单例
     * @since 0.0.3
     */
    public static MethodAccessCache getInstance() {
        return INSTANCE;
    }

    @Override
    public MethodAccess get(Class aClass) {
        MethodAccess methodAccess = ACCESS_MAP.get(aClass);
        if(ObjectUtil.isNotNull(methodAccess)) {
            return methodAccess;
        }

        // 构建并且设置
        methodAccess = MethodAccess.get(aClass);
        this.set(aClass, methodAccess);
        return methodAccess;
    }

    @Override
    public void set(Class aClass, MethodAccess methodAccess) {
        ACCESS_MAP.put(aClass, methodAccess);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy