
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