解读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.找寻需要依赖注入的属性元素列表

  2.属性元素依次转化

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

3.获取自定义的转化器

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

 4.匹配合适的解析器

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

 5.根据返回类型(保护泛型)匹配解析器

 6.执行解析逻辑,进行属性赋值

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

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

 

 

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

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

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

相关文章

  • SpringBoot复习:(18)@Value和@Autowired注解配置的属性是怎么注入到bean中的?

    @Value java doc文档指出,它是由 AutowiredAnnotationBeanPostProcessor 这个 BeanPostProcessor 处理的。 AutowiredAnnotationBeanPostProcessor的构造方法如下: 可见AutowiredAnnotationBeanPostProcessor用来处理@Autowired和@Value这两个注解。 具体的处理流程是通过在容器对bean进行实例化的时候应用上述BeanPostPr

    2024年02月13日
    浏览(38)
  • 003 第一季SpringBoot2核心技术-核心功能2:数据访问、单元测试、指标监控、原理解析:@Value、命令行参数、手动获取bean、自定义starter

    说明 :在SpringBoot中想要操作数据库完成增删改差,按照以往的经验: 原理 : 首先 导入数据开发的场景starter(依赖)---- 这个场景会又会自动导入数据库相关的配置类---- 这个配置类又会导入相关的组件,如:数据源----》 数据源组件中又有相关的数据库配置项:用户名、密码

    2024年01月22日
    浏览(40)
  • Spring中自定义Bean特性

    自定义扩展点 Spring框架提供了许多接口,可以使用它们来定制bean的性质。分组如下: 生命周期回调 ApplicationContextAware 和 BeanNameAware 其他 Aware 接口 为了与容器对bean生命周期的管理进行交互,可以实现Spring InitializingBean和DisposableBean接口。容器对前者调用afterPropertiesSet(),对后

    2024年02月16日
    浏览(37)
  • Spring 非自定义Bean注解

    1.概述 在xml中配置的Bean都是自己定义的, 例如:UserDaolmpl,UserServicelmpl。但是,在实际开发中有些功能类并不是我们自己定义的, 而是使用的第三方jar包中的,那么,这些Bean要想让Spring进行管理,也需要对其进行配置配置非自定义的Bean需要考虑如下两个问题: 被配置的B

    2024年02月13日
    浏览(36)
  • 【Spring类路径Bean定义信息扫描】

    补充一下: AbstractBeanDefinition、AnnotatedBeanDefinition都是spring框架中定义和处理BeanDefinition的类,他们在SpringIOC容器的核心机制中有重要的地位。 1. AbstractBeanDefinition: 是个抽象类,实现了 BeanDefinition 接口,为BeanDefinition提供了一些通用的方法和属性。 提供了BeanDefinition的基本结构

    2024年01月16日
    浏览(43)
  • Spring Bean 作用域的定义

            在 Spring 配置中,我们可以通过 scope 属性来定义 Spring Bean 的作用域,可以接受 5 个内建的值,分别代表 5 种作用域类型,下面给大家详细总结一下: 1、singleton,用来定义一个 Bean 为单例,也就是说在 Spring loC 容器中仅有唯一 的一个实例对象,Spring 中的 Bean 默认

    2024年02月12日
    浏览(36)
  • Java 框架面试题-Spring Boot自定义配置与自动配置共存

    Spring Boot 是一个快速开发框架,可以简化 Spring 应用程序的开发,其中自定义配置是其中一个非常重要的特性。 在 Spring Boot 中,自定义配置允许开发者以自己的方式来配置应用程序。自定义配置可以用于覆盖默认配置,也可以用于添加新的配置项。本文将详细介绍 java框架面

    2023年04月11日
    浏览(51)
  • Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 指的是一个对象创建、存活、消亡的一个完整过程 由Spring负责对象的创建、存活、销毁,了解生命周期,有利于我们使用好Spring为我们创建

    2024年02月05日
    浏览(67)
  • Spring Security在6.0弃用WebSecurityConfigurationAdapter后该如何自定义配置介绍(新旧示例)

    在旧版的配置中,Security需要我们写一个类去继承他的WebSecurityConfigurerAdapter并把这个配置注入到容器中 在继承这个类后,我们可以在WebSecurityConfigurer里面去重写WebSecurityConfigurationAdapter类里面的一些方法来实现自定义过滤链等操作 实现自定义过滤链需要重写configure(HttpSecurit

    2024年02月08日
    浏览(48)
  • 【Spring】使用@Bean和@Import注解配置Bean,与Bean的实例化

    目录 1、bean是什么 2、配置bean 2.1、使用@Bean注解配置Bean 2.2、使用@Import注解配置Bean  3、实例化Bean         在 Spring 中,Bean 是指由 Spring 容器管理的对象。Spring IOC 容器负责创建、配置和管理这些 Bean 对象的生命周期。Spring IOC 容器会管理应用程序中的组件,并通过依赖注

    2024年04月15日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包