在调用工具类时,若工具类中含有@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被注释了,但是只要不去注入它就没关系。

05-11 22:02