文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用spring @value加载

2023-06-29 16:11

关注

这篇文章主要介绍了如何使用spring @value加载的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用spring @value加载文章都会有所收获,下面我们一起来看看吧。

spring@value加载时机

@value是spring中一个用来注入类的成员变量的一种注解,其从配置文件中注入配置的值,需要在spring中配置下需要注入这个类PropertyPlaceholderConfigurer,有多种出入方式,如:

<bean id="propertyConfigurer" class="PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath*:config/*.properties</value></list></property><property name="ignoreUnresolvablePlaceholders" value="true" /><property name="fileEncoding" value="UTF-8"/></bean>

 @Value注入是在spring注入该类的默认构造器之后,再进行注入的。

如何使用spring @value加载

使用

org.springframework.beans.BeanUtils的public static <T> T instantiateClass(Constructor<T> ctor, Object... args)

进行实例化@Component的类。使用这个bean工厂DefaultListableBeanFactory。

使用

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args)

来创建这个bean的实例,mbd中是一些类似这样的数据:

scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null

默认情况下spring管理的bean都是单例。

实例构造完成之后,这个时候@Value注解就会触发,org.springframework.beans.factory.annotation。

AutowiredAnnotationBeanPostProcessor的inject(Object bean, String beanName, PropertyValues pvs)

这个方法就会将bean的属性注入进去了。

注入属性完成后(下图第557行),spring再去加载其他的bean。@Value其实也是使用了@AutoWire的机制。

如何使用spring @value加载

由于spring只会在初始化时,加载这个类的构造器,如果需要修改配置文件中的值,可以通过spring上下文获取bean实例,使用set方式修改值。

@Value加载中文时出现乱码,可以在PropertyPlaceholderConfigurer配置编码格式,上文的code中有调到,也可将中文改成unicode编码。

说说@Value注入时问题

@Value设置默认值

使用@Value注解将变量进行自动注入的时候,经常会出现的一个问题就是我们可能会由于在配置参数中忘记设置该参数造成整个项目报错,其实我们可以通过给被@Value注解作用的变量进行注入的时候如果没有找到该配置参数时设置一个默认值,相当于是一个兜底的方案:

没有默认值的用法:

@Value("${spring.port}")private String port;

增加默认值的用法:

@Value("${spring.port:8080}")private String port;

这里需要注意的是:

即使你的配置参数的值是String类型的话也不需要加双引号

被static修饰的变量通过@Value会注入失败

使用@Value注入配置值的时候报错

Consider defining a bean of type&lsquo;java.lang.String&rsquo; in your configuration.

这里是因为,我在同一个class 里面,引用了另一个注解@AllArgsConstructor

后面我对比删除了@AllArgsConstructor,只是留下@Value 。项目正常启动。

结论:@AllArgsConstructor 与 @Value 注解不能同时使用

关于“如何使用spring @value加载”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何使用spring @value加载”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯