SpringBoot @AutoWired Null

在调用工具类时,若工具类中含有@Autowired注解,这此工具类对象必须同样使用@Autowired注解,否则工具类中的Spring注入的对象都为空值,这里的HadoopTest就是这样

比如MyConfig类是

配置层
@Component
@ConfigurationProperties(prefix = "project")
public class MyConfig {
    private String version;
    private String name;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


HadoopTest类引用了MyConfig
public class HadoopTest {

    @Autowired
    MyConfig myConfig; //这里用了注入,所以controller层的test类中  HadoopTest hadoopTest=new HadoopTest();是无效的

    public void getName() {
        System.out.println(myConfig.getName());
    }

}

Controller中
@RestController
public class test {
    HadoopTest hadoopTest=new HadoopTest();

    @GetMapping("hello")
    public void hello() {
        hadoopTest.getName();
    }
}

这样在System.out.println(myConfig.getName());中是找不到myconfig的,我们应该改成

配置层
@Component
@ConfigurationProperties(prefix = "project")
public class MyConfig {
    private String version;
    private String name;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


HadoopTest类引用了MyConfig
@Component
public class HadoopTest {

    @Autowired
    MyConfig myConfig;

    public void getName() {
        System.out.println(myConfig.getName());
    }

}

Controller类中
@RestController
public class test {
   @Autowired
    HadoopTest hadoopTest;

    @GetMapping("hello")
    public void hello() {
        hadoopTest.getName();
    }
}

或者是

配置层
@Compoment
@ConfigurationProperties(prefix = "project")
public class MyConfig {
    private String version;
    private String name;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

HadoopTest类引用了MyConfig
public class HadoopTest {

    MyConfig myConfig=new Myconfig;

    public void getName() {
        System.out.println(myConfig.getName());
    }

}

Controller类中
@RestController
public class test {
    HadoopTest hadoopTest=new HadoopTest();

    @GetMapping("hello")
    public void hello() {
        hadoopTest.getName();
    }
}

也就是一条逻辑线上,HadoopTest注入了MyConfig,那么在test中必须也是注入而不是new,原因以后在补充。
补充:1.在第三种情况中,虽然MyConfig被注释了,但是只要不去注入它就没关系。

转载于:https://www.cnblogs.com/WinseterCheng/p/10021300.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值