前文
class ImageDataService extends DataDao addアノテーション@Service(value = "aaaDataService '")
このクラスが必要な場合、対応するBeanの名前はaaaDataServiceです。
DataDaoに複数の現実がある場合、次のコードをコンパイルするとエラーが報告されます
@Autowired
private DataService dataService;
1. @ Resourceアノテーション
@Resource(name="aaaDataService")
private DataService dataService;
@Resourceは@Autowiredと同等ですが、@ AutowiredはbyTypeに従って自動的に挿入され、@ ResourceはデフォルトでbyNameに従って自動的に挿入される点が異なります。
2. @ Qualifierアノテーション
@Autowired
@Qualifier("aaaDataService")
private DataService dataService;
3.デフォルト値
クラスImageDataServiceに特別な識別子beanName(@Service)がない場合
、変数名としてdataServiceの代わりにimageDataServiceを使用します。
通常の状況では、@ AutowiredはbyTypeメソッドを介して注入されますが、複数の実装クラスの場合、byTypeメソッドは一意ではなくなりますが、byNameメソッドを介して注入する必要があり、名前はデフォルトで変数に基づいています名前。
@Autowired
private DataService voiceDataService;
@Autowired
private DataService textDataService;
@Autowired
private DataService aaaDataService;
@Autowired
@Qualifier(value = "aaaDataService")
private DataService videoDataService;
@Test
public void test(){
System.out.println(voiceDataService.getClass().toString());
System.out.println(textDataService.getClass().toString());
System.out.println(videoDataService.getClass().toString());
}
演算結果:
VoiceDataService
TextDataService
ImageDataService
ImageDataService