@autowired
用于測試的實體類User,并将這個類注入到Spring容器中,為@autowired注解放在方法做前提工作
@Component
public class User {
private String name = "張三";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
這是一個配置類,SpringBoot啟動後會加載這個配置類,把@autowired放在方法上
// 測試一
@Configuration
public class UserConfig {
@Autowired
public void getName(User user){
System.out.println("主動注入的User:"+user.getName());
}
}
啟動SpringBoot後控制台列印(測試一):
// 測試二
@Configuration
public class UserConfig {
@Autowired
public void getName(){
System.out.println("主動注入的User:.......");
}
}
啟動SpringBoot後控制台列印(測試二):
結論:@autowired注解放在方法上,如果方法沒有參數,spring容器會在類加載完後執行一次這個方法;如果方法中有參數的話,還會從容器中自動注入這個方法的參數,然後執行一次這個方法。
@autowired(required = false)
測試一
@Component
public class User {
private String name = "張三";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// 測試一
@Configuration
public class UserConfig {
@Autowired(required = false)
public void getName(User user){
System.out.println("主動注入的User:"+user.getName());
}
}
測試一結果:
測試二
不将User注入到容器中
public class User {
private String name = "張三";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Configuration
public class UserConfig {
@Autowired(required = false)
public void getName(User user){
System.out.println("主動注入的User:"+user.getName());
}
}
測試二結果:
沒有執行getName方法
結論:@autowired(required = false)作用在方法上,當方法有參數時,如果IOC容器中有方法參數的對象,那麼會自動注入并執行方法一次;如果IOC容器中沒有方法的參數對象,那麼這個方法不會被執行,不管這個方法上有多少個參數,隻要有一個參數對象是IOC容器中沒有的,這個方法便不會被執行。如果方法沒有參數,那麼會被執行一次。