zoukankan      html  css  js  c++  java
  • SpringBoot:SpringBoot中@Value注入失败

    1. 第一步检测语法是否正确

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

    2.第二步检测配置文件中是否有进行配置

    url=test
    username=username
    password=password

    3.第三步检测是否增加了@Component注解

    在spring中,使用了spring的注解,那么就需要使用spring来进行管理对象,而不能自己进行new,否则就会导致失败。

    @Component   //将类交给spring进行对象管理
    public class DBUtils {
    
        @Value("${url}")  
        private String url;
        @Value("${username}")  
        private String username;
        @Value("${password}")  
        private String password;
    
    }

    4.第四步检测代码中的书写方式

    不要再无参构造器中,进行new对象的操作。否则就会造成@Value注解失败。(本人就是踩到这步坑)。

       初始化上下文可以使用@PostConstruct注解来进行初始化,他会在spring加载完信息后,进行调用并且只调用一次。

    5.@Value无法注入static属性

    使用@Value直接放在static的属性上是无法注入内容的!!!此方式会一直是null.

    原因
    发现@value不能直接注入值给静态属性,spring 不允许/不支持把值注入到静态变量中;spring支持set方法注入,我们可以利用非静态setter 方法注入静态变量,并且使用@Value的类必须交个spring进行管理.就如同@Autowired有时无法注入一样.
    详细说明:https://blog.csdn.net/sqlgao22/article/details/100100314

    改进

    使用setter方法进行属性的赋值,并且setter方法不能有static

    idea自动生成的方法会有static,需要手动删除.

    @Component   //将类交给spring进行对象管理
    public class DBUtils {
    
        private static String url;
        private static String username;
        private static String password;
    
        @Value("${url}")  //删除掉static
        public void setUrl(String url) {
            DBUtils.url = url;
        }
        @Value("${username}")
        public void setUsername(String username) {
            DBUtils.username = username;
        }
        @Value("${password}")
        public void setPassword(String password) {
            DBUtils.password = password;
        }
        //查看是否注入
        public static void get() {
            System.out.println("=====url====="+url);
            System.out.println("=====username====="+username);
            System.out.println("=====password====="+password);
        }
    }

    测试

        @RequestMapping("/get")
        @ResponseBody
        public String get() {
            DBUtils.get();
            return "get";
        }

    测试后输出:


    在这里插入图片描述


    成功注入属性.

    文章转载至:https://blog.csdn.net/sqlgao22/article/details/100096348

  • 相关阅读:
    C#获取网页内容的三种方式
    C#,COM口,接收,发送数据
    mysql查询当前正在使用数据库
    错误日志中关于innodb的问题收集
    Oracle10g下载地址--多平台下的32位和64位
    Linux-PAM认证模块
    kali安装vmware tools
    redis数据库
    mysql的innodb中事务日志ib_logfile
    MySQL数据故障时备份与恢复
  • 原文地址:https://www.cnblogs.com/nhdlb/p/11741228.html
Copyright © 2011-2022 走看看