@Autowiredインターフェースを自動配線する場合、複数の実装処理方法があります

前文

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

おすすめ

転載: blog.csdn.net/u013947963/article/details/109819787