使用@Value无法注入

错误信息
昨天写项目的时候使用 @Value 注解时。发现使用 @Value 项目保存,在配置文件中无法找到对应的键值对。错误信息是

org.springframework.beans.factory.BeanCreationException: Error
creating bean with name ‘blogServiceIpml’: Injection of
autowired dependencies failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.lang.String com.pushlightly.service.ipml.BlogServiceIpml.ABCD; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder ‘BLOG_PAGE_COUNT’ in string value “${BLOG_PAGE_COUNT}”

配置信息
在代码中,使用依赖注入,注入的值为:
这里写图片描述

配置文件:
这里写图片描述

spring 配置文件 1:
这里写图片描述

spring 配置文件 2:
这里写图片描述

错因排除:
1.查看是不是注解类的所在的包导错了:(org.springframework.beans.factory.annotation.Value);

2.查看日志文件:

查看配置文件是否被初始化:

[org.springframework.core.io.support.PathMatchingResourcePatternResolver]-[DEBUG]
Resolved location pattern [classpath:resources/*.properties] to
resources [file
[E:\javadaima1\blog\blog-service\target\classes\resources\db.properties],
file
[E:\javadaima1\blog\blog-service\target\classes\resources\resource.properties]]

从日志信息可以看出 db.properties 文件和 resource.properties 均已经被初始化。

2.查看 @Value 注解是否被扫描到:
在日志中,随便查找一个被 @Value 注解的变量名。

这里写图片描述

发现所在包的注解已经被扫描到。

现在尴尬了,所有的配置都正确,为什么无法进行注入呢???

解决方案:

在多个配置文件中这能使用一次 也就是说只能在一个 spring 配置文件中导入所有的配置文件。

spring 正确配置:
spring 配置文件 1:

这里写图片描述

spring 配置文件 2:

这里写图片描述

这样问题就解决了!!!!

具体原因查看博客

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @ValueSpring 框架中的注解,用于将属性值注入到类的属性中。它可以将配置文件中的值或者系统环境变量中的值注入到属性中,从而达到动态配置的目的。例如: ``` @Value("${server.port}") private int port; ``` 上述代码会将配置文件中 `server.port` 的值注入到 `port` 属性中。`${}` 中的内容是占位符,可以使用 Spring EL 表达式进行计算。如果需要注入系统环境变量中的值,可以使用 `${}` 中的 `env.` 前缀,如 `${env.JAVA_HOME}`。 ### 回答2: 在Java中,`@Value`是一个注解,用于将属性值直接注入到类中。它是Spring框架中的一个注解,用于简化配置文件的编写。 使用`@Value`注解可以实现依赖注入,即将属性的值注入到类的实例中。在注解中,可以通过`${}`或者`#{}`表达式来引用配置文件中的属性值。这样就不需要在类中手动配置属性的值,而是直接从配置文件中读取。 `@Value`注解可以用在字段、方法、构造函数和参数上。当用在字段上时,可以直接将属性值注入到字段中。当用在方法上时,可以将属性值注入到方法的参数中。当用在构造函数上时,可以将属性值注入到构造函数的参数中。 另外,`@Value`注解还可以用于注入其他bean的属性值。它可以与`@Autowired`注解一起使用,将其他bean的属性值注入到当前类的属性中。 总之,`@Value`注解是一个方便的注解,可以简化属性值的配置。通过将属性值直接注入到类中,可以减少配置文件的编写,提高代码的可读性和可维护性。它是Spring框架中用于依赖注入的重要注解之一。 ### 回答3: 在Java编程语言中,@Value是一个注解,用于为类的属性赋值。它是Spring框架中的一个注解,用于实现属性注入。 @Value注解可以用于各种数据类型的属性,包括基本类型、引用类型和集合类型。通过@Value注解,我们可以将属性值直接注入到类中,而无需在代码中手动赋值。 使用@Value注解时,我们可以通过三种方式为属性赋值。首先,我们可以直接将常量值赋给属性,例如@Value("Hello, World")。其次,我们可以引用另一个Spring Bean的属性值,例如@Value("#{anotherBean.name}")。最后,我们还可以引用外部属性文件中的属性值,例如@Value("${app.version}")。 在使用@Value注解时,我们可以使用SpEL(Spring 表达式语言)对属性值进行动态计算和处理。这使得属性值可以根据需要进行灵活的改变,而不需要我们手动修改代码。 除了为属性赋值外,@Value注解还可以与其他注解一起使用,例如@Autowired和@Qualifier。这些注解可以一起工作,实现更强大和灵活的依赖注入功能。 总之,@Value注解是Java编程语言中的一个重要注解,主要用于为类的属性赋值。它在Spring框架中被广泛使用,可以实现属性的注入和动态计算,提高了代码的可维护性和扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值