解读spring中@Value 如何将配置转自定义的bean

这篇具有很好参考价值的文章主要介绍了解读spring中@Value 如何将配置转自定义的bean。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现方式

着急寻求解决方式的猿友先看这块

定义配置转化类

public class UserConverter implements Converter<String, List<User>> {

        @Override
        public List<User> convert(String config) {
            if (StringUtils.isEmpty(config)) {
                return Collections.emptyList();
            }
            return JsonUtil.fromJson(config, new TypeReference<List<User>>() {
            });
        }
    }

将转化类放入转化工厂


@Configuration
public class ConverterConfiguration {


    @Bean
    public ConversionServiceFactoryBean conversionService() {
        ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean();
        factoryBean.setConverters(Sets.newHashSet(new UserConverter()));
        return factoryBean;
    }
}

属性注入

@Service
public class UserService{

@Value("${userConfig:[]}")
private List<User> users;
}

spring在bean生命周期的属性赋值中,会根据属性的类型,匹配相应的转化类,执行转化,进而赋值。

代码改进

不难看出,这些转化类仅执行转化逻辑,不存在线程安全问题,可以将其放入spring的IOC中,关闭对ConverterConfiguration的修改。代码简化如下:


@Configuration
public class ConverterConfiguration {

    // 收集自定义的配置解析工具类
    @Resource
    private Set<Converter> converters;


    @Bean
    public ConversionServiceFactoryBean conversionService() {
        ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean();
        factoryBean.setConverters(converters);
        return factoryBean;
    }
}


@Component
public class UserConverter implements Converter<String, List<User>> {

        @Override
        public List<User> convert(String config) {
            if (StringUtils.isEmpty(config)) {
                return Collections.emptyList();
            }
            return JsonUtil.fromJson(config, new TypeReference<List<User>>() {
            });
        }
    }

按需拓展定义各式各样的Converter即可

下面谈下具体spring是怎么做的

解读spring中@Value 如何将配置转自定义的bean,spring,java,spring boot,后端

熟悉springbean生命周期的猿友应该明白,红框中的方法栈都是bean生命周期的执行路径(这里不做阐述,感兴趣的猿友可以翻阅我往期博客,里面有做源码解读介绍),我们从生命周期的属性赋值开始剖析源码。

1.找寻需要依赖注入的属性元素列表

解读spring中@Value 如何将配置转自定义的bean,spring,java,spring boot,后端  2.属性元素依次转化

解读spring中@Value 如何将配置转自定义的bean,spring,java,spring boot,后端

3.获取自定义的转化器

解读spring中@Value 如何将配置转自定义的bean,spring,java,spring boot,后端

 4.匹配合适的解析器

解读spring中@Value 如何将配置转自定义的bean,spring,java,spring boot,后端

解读spring中@Value 如何将配置转自定义的bean,spring,java,spring boot,后端 5.根据返回类型(保护泛型)匹配解析器

解读spring中@Value 如何将配置转自定义的bean,spring,java,spring boot,后端 6.执行解析逻辑,进行属性赋值

解读spring中@Value 如何将配置转自定义的bean,spring,java,spring boot,后端

 文章来源地址https://www.toymoban.com/news/detail-648301.html

 

 

到了这里,关于解读spring中@Value 如何将配置转自定义的bean的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://blog.csdn.net/yxh13521338301/article/details/132210031

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包