我有以下部件,在兩個不同的文件:@Autowired是否照顧嵌套自動裝配?
@Component
public class Chauffeur {
Car car;
public Chauffeur(Car car){
this.car = car;
}
public void go(){
System.out.println("Chauffeur");
car.drive();
}
}
@Component
public class Car{
public void drive() {
System.out.println("Drive car");
}
}
下面的配置文件:
@Configuration
@ComponentScan
public class DriveableConfiguration {
}
和以下測試:上述
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=DriveableConfiguration.class)
public class DriveableTest {
@Autowired
Chauffeur chauffeur;
@Test
public void chauffeurTest(){
chauffeur.go();
}
}
所有類在相同的包裝和測試正在通過。
在測試中,我使用@Autowired註釋了chauffer
,這應該表示Spring容器在創建Chauffeur實例之後不需要顯式實例化它。 現在,Chauffer的構造函數需要Car實例,所以沒有該類的默認構造函數。儘管如此,容器創建它,在構造函數中注入所需的實例。
@Autowired是否說容器實例化元素與它可以提供的任何(組件,豆),包含在構造函數中的參數?如果是這樣,在什麼情況下需要使用@Autowired來註釋構造函數?