1、JDK动态代理
示例1:获取当前对象所有继承和实现接口
public Set<String> getInterfasesName(Class<?> clazz){
Set<String> rootIName = new HashSet<String>();
for (Class<?> iClass:clazz.getInterfaces()) {
rootIName.addAll(getInterfasesName(iClass));
rootIName.add(iClass.getName());
}
Class<?> superClass = clazz.getSuperclass();
if (superClass!=null) {
rootIName.addAll(getInterfasesName(superClass));
}
return rootIName;
}
2、使用CGLib实现动态代理
示例1:生成当前类扩展类,并设置回调返回
public Enhancer createEnhancer(Class<?> clazz){
try {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(clazz);
enhancer.setCallback(this);
return enhancer;
} catch (Exception e) {
throw new SecException(e);
}
}