BeanDeserializerFactory.java 文件源码

java
阅读 28 收藏 0 点赞 0 评论 0

项目:RHome 作者:
/**
 * Method that is to find all creators (constructors, factory methods)
 * for the bean type to deserialize.
 */
protected void addDeserializerCreators(DeserializationConfig config,
                                       BasicBeanDescription beanDesc,
                                       BeanDeserializer deser)
    throws JsonMappingException
{
    AnnotationIntrospector intr = config.getAnnotationIntrospector();
    boolean fixAccess = config.isEnabled(DeserializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS);

    // First, let's figure out constructor/factor- based instantation
    // 23-Jan-2010, tatus: but only for concrete types
    if (beanDesc.getType().isConcrete()) {
        Constructor<?> defaultCtor = beanDesc.findDefaultConstructor();
        if (defaultCtor != null) {
            if (fixAccess) {
                ClassUtil.checkAndFixAccess(defaultCtor);
            }

            deser.setDefaultConstructor(defaultCtor);
        }
    }

    // need to construct suitable visibility checker:
    VisibilityChecker<?> vchecker = config.getDefaultVisibilityChecker();
    if (!config.isEnabled(DeserializationConfig.Feature.AUTO_DETECT_CREATORS)) {
        vchecker = vchecker.withCreatorVisibility(Visibility.NONE);
    }
    vchecker = config.getAnnotationIntrospector().findAutoDetectVisibility(beanDesc.getClassInfo(), vchecker);

    CreatorContainer creators =  new CreatorContainer(beanDesc.getBeanClass(), fixAccess);
    _addDeserializerConstructors(config, beanDesc, vchecker, deser, intr, creators);
    _addDeserializerFactoryMethods(config, beanDesc, vchecker, deser, intr, creators);
    deser.setCreators(creators);
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号