顿悟<!--> 2024-03-07 14:52 采纳率: 0%
浏览 9

meven,@value属性注入错误

在yaml文件中配置 name ,然后 用@value注入属性,为什么会报错?
可是我在application.properties中配置name,然后再注入属性却可以运行?求指教

img

img

img

已经找到原因了,因为我的yaml文件没有创建对。初学者,见谅见谅

  • 写回答

4条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-03-07 15:00
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题解答:
    1. 为什么在yaml文件中配置name,用 @value注入属性会报错? 可能是因为yaml文件中的配置格式存在问题,导致在注入属性的时候找不到正确的属性值。比如,yaml文件中的name字段没有用双引号括起来,或者缩进不正确等。 举个例子,如果yaml文件中的配置如下:
    name: xiaoli
    

    则在使用 @Value 注解时,应该写成:

    @Value("${name}")
    private String name;
    

    注意,这里的 ${name} 是使用了 SpEL 表达式,可以直接引用配置文件中的属性值。 2. 为什么在application.properties中配置name,然后再注入属性却可以运行? 在 application.properties 配置文件中配置属性的格式是固定的,因此使用 @Value 注解来注入属性时不会出现上述的问题。 比如,如果在 application.properties 文件中配置了如下属性:

    name=xiaoli
    

    则在使用 @Value 注解时,可以直接写成:

    @Value("${name}")
    private String name;
    

    这里不需要使用 SpEL 表达式,只需要在 ${} 中写上属性名即可。 代码示例: YamlConfig.yaml 配置文件:

    name: xiaoli
    

    People.java 类:

    @Component
    public class People {
        @Value("${name}")
        private String name;
        public String getName() {
            return name;
        }
    }
    

    HelloController.java 控制器:

    @RestController
    public class HelloController {
        @Autowired
        private People people;
        @GetMapping("/hello")
        public String hello() {
            return "Hello, " + people.getName() + "!";
        }
    }
    

    这里通过 @Value("${name}") 注解来注入属性值,${name} 会自动从配置文件中读取属性值。 运行程序后,访问 http://localhost:8080/hello 会返回 “Hello, xiaoli!” 的字符串。

    评论

报告相同问题?

问题事件

  • 修改了问题 3月7日
  • 创建了问题 3月7日