在調用工具類時,若工具類中含有@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被注釋了,但是只要不去注入它就沒關系。