2021SC@SDUSC
FreeMarker代码分析第十篇- beans包
- AllowAllMemberAccessPolicy.java
- 代码分析
- APIModel.java
- 代码分析
- ArrayModel.java
- 代码分析
package freemarker.ext.beans; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; final class AllowAllMemberAccessPolicy implements MemberAccessPolicy { public static final AllowAllMemberAccessPolicy INSTANCE = new AllowAllMemberAccessPolicy(); private AllowAllMemberAccessPolicy() { } public static final ClassMemberAccessPolicy CLASS_POLICY_INSTANCE = new ClassMemberAccessPolicy() { @Override public boolean isMethodExposed(Method method) { return true; } @Override public boolean isConstructorExposed(Constructor> constructor) { return true; } @Override public boolean isFieldExposed(Field field) { return true; } }; @Override public ClassMemberAccessPolicy forClass(Class> contextClass) { return CLASS_POLICY_INSTANCE; } @Override public boolean isToStringAlwaysExposed() { return true; } }APIModel.java 代码分析
package freemarker.ext.beans; final class APIModel extends BeanModel { APIModel(Object object, BeansWrapper wrapper) { super(object, wrapper, false); } protected boolean isMethodsShadowItems() { return true; } }ArrayModel.java 代码分析
package freemarker.ext.beans; import java.lang.reflect.Array; import freemarker.ext.util.ModelFactory; import freemarker.template.ObjectWrapper; import freemarker.template.TemplateCollectionModel; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; import freemarker.template.TemplateModelIterator; import freemarker.template.TemplateSequenceModel; public class ArrayModel extends BeanModel implements TemplateCollectionModel, TemplateSequenceModel { static final ModelFactory FACTORY = new ModelFactory() { @Override public TemplateModel create(Object object, ObjectWrapper wrapper) { return new ArrayModel(object, (BeansWrapper) wrapper); } }; // array对象的数量 private final int length; public ArrayModel(Object array, BeansWrapper wrapper) { super(array, wrapper); Class clazz = array.getClass(); if (!clazz.isArray()) throw new IllegalArgumentException("Object is not an array, it's " + array.getClass().getName()); length = Array.getLength(array); } @Override public TemplateModelIterator iterator() { return new Iterator(); } @Override public TemplateModel get(int index) throws TemplateModelException { try { return wrap(Array.get(object, index)); } catch (IndexOutOfBoundsException e) { return null; // throw new TemplateModelException("Index out of bounds: " + index); } } private class Iterator implements TemplateSequenceModel, TemplateModelIterator { private int position = 0; @Override public boolean hasNext() { return position < length; } @Override public TemplateModel get(int index) throws TemplateModelException { return ArrayModel.this.get(index); } @Override public TemplateModel next() throws TemplateModelException { return position < length ? get(position++) : null; } @Override public int size() { return ArrayModel.this.size(); } } @Override public int size() { return length; } @Override public boolean isEmpty() { return length == 0; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)