iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何使用@Value值注入及配置文件组件扫描
  • 405
分享到

如何使用@Value值注入及配置文件组件扫描

2023-06-20 14:06:16 405人浏览 安东尼
摘要

本篇内容介绍了“如何使用@Value值注入及配置文件组件扫描”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!@Value值注入及配置文件组件扫

本篇内容介绍了“如何使用@Value值注入及配置文件组件扫描”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

@Value值注入及配置文件组件扫描

spring配置文件对应的是父容器springMVC配置文件产生的是子容器,前者一般配置数据源,事务,注解等,当然还可以进一步将一些配置细化到其他xml中;后者一般配置控制层相关的,如静态资源,视图解析器等。

系统启动的时候,先初始化父容器,然后初始化子容器。这里会涉及一个问题,如果配置组件扫描时都配置全组件扫描,就会导致service组件会被扫描两次,造成事务无法处理。

所以最好在springmvc配置文件中只做controller的扫描,在spring配置文件中扫描其他组件。

在spring的配置文件中配置:

<context:component-scan base-package="com"/>

在springMVC的配置文件中配置:

<context:component-scan base-package="com.**.controller"/>

这样就能各司其职了。

在使用中,这两个配置文件作用不同。如果要使用@Value注入一些系统配置文件中的变量时要注意:如果要在controller中使用注入的变量,需要在springMVC的配置文件中配置:

<context:property-placeholder location="classpath:{your variable file}.properties"/>

如果只在spring的配置文件中配置,那么在controller中是不会注入成功的。原因是:在项目启动时,先初始化父容器,再初始化子容器。如果两者在初始化时扫描了同样的组件,则子容器会覆盖父容器的相关的bean。子容器因为没有配置环境变量的文件bean,因此会用null覆盖掉原值(子容器能看到父容器的bean,反过来则不行)。

测试demo如下:

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:applicationContext.xml","classpath:servlet-dispatcher.xml"})public class InjecTest {    @Value("${ly.key}")    private String key;    @Test    public void test(){        System.out.println("注入的key为:"+key);    }

基于@Value进行注入时有两种方式,占位符和spel表达式

 //占位符方式    @Value("${jdbc.url}")    private String url;
 //SpEL表达方式,其中代表xml配置文件中的id值configProperties    @Value("#{configProperties['jdbc.username']}")    private String userName;

这两种方式需要在xml中配置时也是不一样的

<!--基于占位符方式 配置单个properties -->    <!--<context:property-placeholder location="conf/jdbc.properties"/>-->    <!--基于占位符方式 配置多个properties -->    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">        <property name="locations">            <list>                <value>classpath:config/resource/dev/application.properties</value>                <value>classpath:config/resource/dev/lyframework.properties</value>                <value>classpath:config/resource/dev/common.properties</value>            </list>      </property>    </bean>
 <!--基于SpEL表达式 配置多个properties id值为configProperties 提供java代码中使用 -->    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">        <property name="locations">            <list>                <value>classpath:/conf/jdbc.properties</value>            </list>        </property>    </bean>    <!--基于SpEL表达式 配置单个properties -->    <!--<util:properties id="configProperties" location="classpath:conf/jdbc.properties"/>-->

Spring @Value获取不到值

一、问题背景

这两天做东西的时候发现一个问题,在SpringMVC中使用@Value的时候,无法获取@Value对应的值。在网上查阅了各种资料之后,总结一下。

二、@Value注解的作用

为了减小耦合度,通常,将一些固定的常量放在配置文件***.properties中。

properties内容定义形式:名称=值

SAY_COUNT=10TITLE_COUNT=10MESSAGE_COUNT=10BACK_COUNT=10

当需要这些常量的时候,通过加载properties文件,在需要的位置使用这些常量,当需要修改这些常量值的时候,只要在配置文件中修改就可以了。

在没有使用spring之前,想使用配置文件当中的数据必须得自己手工写代码加载配置文件。但是在使用spring的时候,这种操作可以通过在spring中添加一个配置来完成。

<context:property-placeholder location="classpath:resource/resource.properties"/>

在需要使用的地方,通过使用@Value注解,就可以自动完成注入。

@Value("${INDEX_TITLE}")private Integer INDEX_TITLE;

三、获取不到值的情况

1)当SpringMVC与Spring整合使用的时候,在Controller中无法获取@Value对应的值。(刚开始我就是这种情况)

产生原因:只在applicationContext中添加了扫描,没有在SpringMVC对应的配置文件中扫描。

applicationContext加载的是父容器,,父容器在项目启动的时候就被加载了。SpringMVC对应的配置文件加载的是子容器,子容器可以访问父容器的对象,但是不能访问加载的配置文件。所以,如果想在SpringMVC中使用加载的配置文件,需要在SpringMVC对应的配置文件中添加相应的配置即可。

2)在service或者dao层无法获取@Value的数值。

可能情况:有多个applicationContext.xml文件,里面有多个context:property-placeholder,在WEB容器启动的时候同时加载了这些配置文件,这时候只会有一个配置文件中的context:property-placeholder会被加载,其他的不会被加载。

那么,当需要加载多个properties的时候,如何解决?可以用下面的方法

<context:property-placeholder location="classpath:resource/*.properties"/>

这样,将所有需要加载的properties放在一个目录之下,通过*.properties就可以加载所有的properties文件。

“如何使用@Value值注入及配置文件组件扫描”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何使用@Value值注入及配置文件组件扫描

本文链接: https://www.lsjlt.com/news/297718.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用@Value值注入及配置文件组件扫描
    @Value值注入及配置文件组件扫描 spring配置文件对应的是父容器,springMVC配置文件产生的是子容器,前者一般配置数据源,事务,注解等,当然还可以进一步将一些配置细化到...
    99+
    2024-04-02
  • 如何使用@Value值注入及配置文件组件扫描
    本篇内容介绍了“如何使用@Value值注入及配置文件组件扫描”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!@Value值注入及配置文件组件扫...
    99+
    2023-06-20
  • springboot如何使用@Value获取配置文件的值
    使用@Value获取配置文件的值 1、创建配置文件(application.properties) spring.activemq.broker-url=tcp://localh...
    99+
    2024-04-02
  • 使用@Value注解从配置文件中读取数组
    @Value注解从配置文件读取数组 作用:从配置文件中取值 用法: 1.取单个值 (1)configuration.properties配置 status.notice.swit...
    99+
    2024-04-02
  • spring@value注入配置文件值失败的原因分析
    目录spring@value注入配置文件值失败的原因spring配置文件@Value注解注入失败或为null解决方案代码示例问题解析问题拓展spring@value注入配置文件值失败...
    99+
    2024-04-02
  • 如何进行spring@value注入配置文件值失败的原因分析
    今天就跟大家聊聊有关如何进行spring@value注入配置文件值失败的原因分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。spring@value注入配置文件值失败的原因今天我写...
    99+
    2023-06-22
  • Spring中利用配置文件和@value注入属性值代码详解
    1 简单属性值注入package com.xy.test1;import org.springframework.beans.factory.annotation.Value;import org.springframework.stere...
    99+
    2023-05-30
    spring 注入属性值 ue
  • 使用@value注解取不到application.xml配置文件中的值问题
    目录@value注解取不到application.xml的值报错信息原来代码问题原因思考拓展阅读工具类@Value取不到值原因是new的对象@value注解取不到applicatio...
    99+
    2024-04-02
  • springboot yml配置文件值注入方式
    目录yml配置文件值注入搭建项目创建实体类spring boot核心配置文件application.yml测试类运行自动注入yml文件和properties文件yml文件的自动注入c...
    99+
    2024-04-02
  • 使用@Value注解从配置文件中读取数组的方法
    本篇内容主要讲解“使用@Value注解从配置文件中读取数组的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用@Value注解从配置文件中读取数组的方法”吧!@Value注解从配置文件读取数...
    99+
    2023-06-20
  • 使用@PropertySource读取配置文件通过@Value进行参数注入
    目录@PropertySource读取配置文件通过@Value参数注入Spring读取配置@Value、@PropertySource、@ConfigurationPropertie...
    99+
    2024-04-02
  • 使用@value注解取不到application.xml配置文件中的值怎么解决
    本篇内容介绍了“使用@value注解取不到application.xml配置文件中的值怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2023-06-29
  • Spring注解@Value及属性加载配置文件方式
    Spring中使用@Value注解给bean加载属性的配置文件有两种使用方式 第一种:使用@Value("#{configProperties['websit.msgname']}"...
    99+
    2024-04-02
  • springboot配置文件中使用${}注入值的方式有哪些
    这篇文章主要为大家展示了“springboot配置文件中使用${}注入值的方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springboot配置文件中使用${}注入值的方式有哪些”这篇...
    99+
    2023-06-29
  • SpringBoot怎么配置文件给实体注入值
    这篇文章主要介绍了SpringBoot怎么配置文件给实体注入值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么配置文件给实体注入值文章都会有所收获,下面我们一起来看看吧。配置文件给实体注入...
    99+
    2023-06-29
  • SpringBoot 配置文件给实体注入值方式
    目录配置文件给实体注入值properties用法yaml用法通过配置文件给实体类注入属性上面yml中注意也可以使用properties注入配置文件值注入方式1.1 从全局配置文件中读...
    99+
    2024-04-02
  • Spring使用@Value注解与@PropertySource注解加载配置文件操作
    1、@Value注解简介 Spring框架提供的@Value注解可以将外部的值动态注入到Bean中,@Value注解使用在字段、构造器参数和方法参数上。 @Value可以指定属性取值...
    99+
    2024-04-02
  • Spring装配Bean之如何实现组件扫描和自动装配
    这篇文章给大家分享的是有关Spring装配Bean之如何实现组件扫描和自动装配的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spring从两个角度来实现自动化装配:组件扫描:Spring会自动发现应用上下文中所创...
    99+
    2023-05-31
    spring bean
  • springboot配置文件中使用${}注入值的两种方式小结
    目录配置文件中使用${}注入值方式在springboot中使用System.setProperty设置参数配置文件自扫描spring配置文件${}的用法话不多说直接看就完事了配置文件...
    99+
    2024-04-02
  • 使用ant编译Java文件之如何配置配置文件的依赖设置以及引入jar包
    这篇文章主要介绍了使用ant编译Java文件之如何配置配置文件的依赖设置以及引入jar包,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。主要涉及到配置文件的依赖设置以及jar包...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作