开发者

Springboot中@Value失效问题

目录
  • Springboot中@Value失效
  • 分析原因
    • 1.使用@Component注解
    • 2.如果不想将对象标记为一个组件
  • 总结

    Springboot中@Value失效

    在写项目过程中,由于快速开发项目,使用new的方式调用组件或服务,这样可麻烦了,导致组件里由@Value属性无效。

    有趣的是,在排查问题过程中,我在其他服务使用@Value又有效果,这看来看去。

    最终真相只有一个,这。

    分析原因

    new 的方法出来的实例不会交给spring管http://www.devze.com理python,所以不会代理。

    在Spring框架中,通过使用@Autowired或@Resource等注解,可以将对象注入到其他组件或服务中。

    这样,Spring会负责管理该对象的生命周期,并在需要的时候自动注入相关的属性。

    如果您想让@Value注解生效,可以考虑将对象的创建交由Spring来管理。

    1.使用@Component注解

    将对象标记为一个Spring管理的组件:

    @Component
    public class MyObject {
        @Value("${my.property}")
        private String myProperty;
        
        // getters and setters
    }

    然后在需要使用MyObject的地方,通过@Autowired注解将其注入:

    @Autowired
    pjavascriptrivate MyObject myObject;

    这样Spring会自动将属性值注入到MyObject对象中。

    2.如果不想将对象标记为一个组件

    可以使用@Configuration和@Bean注解来创建对象:

    @Configuration
    public class MyConfig {
        @Value("${my.property}")
        private String myPropjserty;
    
        @Bean
        public MyObject myObject() {
            MpythonyObject myObject = new MyObject();
            myObject.setMyProperty(myProperty);
            return myObject;
        }
    }

    然后在需要使用MyObject的地方,通过@Autowired注解将配置类注入,并调用其myObject()方法获取对象:

    @Autowired
    private MyConfig myConfig;
    ...
    MyObject myObject = myConfig.myObject();

    这样也可以让@Value注解生效,并将属性值注入到MyObject对象中。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜