spring中的ReflectionUtil
反射工具抽象类,处理方法及字段。主要通过MethodCallback,MethodFilter,FieldCallback,FieldFilter。其类结构如下
·
反射工具抽象类,处理方法及字段。主要通过MethodCallback,MethodFilter,FieldCallback,FieldFilter。
其类结构如下

1、主要方法
1.1 doWithMethods
遍历clazz层级关系的方法(包含父类的),通过MethodFilter过滤 ,MethodCallback回调来处理方法。在处理父类时,如果方法过滤器不为用户定义方法或者为用户定义方法不是不包含Object的方法。如果为接口类型,则处理接口方法
public static void doWithMethods(Class<?> clazz, MethodCallback mc, @Nullable MethodFilter mf) {
// Keep backing up the inheritance hierarchy.
Method[] methods = getDeclaredMethods(clazz, false);
for (Method method : methods) {
if (mf != null && !mf.matches(method)) {
continue;
}
try {
mc.doWith(method);
}
catch (IllegalAccessException ex) {
throw new IllegalStateException("Not allowed to access method '" + method.getName() + "': " + ex);
}
}
if (clazz.getSuperclass() != null && (mf != USER_DECLARED_METHODS || clazz.getSuperclass() != Object.class)) {
doWithMethods(clazz.getSuperclass(), mc, mf);
}
else if (clazz.isInterface()) {
for (Class<?> superIfc : clazz.getInterfaces()) {
doWithMethods(superIfc, mc, mf);
}
}
}
1.2 doWithLocalMethods
只处理本层级的方法,不包含父类的
public static void doWithLocalMethods(Class<?> clazz, MethodCallback mc) {
Method[] methods = getDeclaredMethods(clazz, false);
for (Method method : methods) {
try {
mc.doWith(method);
}
catch (IllegalAccessException ex) {
throw new IllegalStateException("Not allowed to access method '" + method.getName() + "': " + ex);
}
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)