解答為什么@Autowired使用在接口上而不是實現類上


如果Spring配置了<context:component-scan base-package="com.*.service"></context:component-scan>,並且要注入的接口只有一個實現類的話,那么spring框架可以自動將interface與其實現類組裝起來。如果沒有配置component scan,那么我們必須在application-config.xml(或等同的配置文件)定義這個bean。
一般情況下一個接口我們只寫一個實現類,這個時候我們只需要在實現類上注解@service

@Service public class UserServiceImpl implements UserService { …… } 

在這種情況下,我們要使用這個實現類的時候也只需要用@Autowired即可
Spring會自動組裝userservice與其實現類UserServiceImpl

@Autowired private Userservice userservice; 

但是我們也可能會為一個接口定義多個實現類,這時我們在用@Service時需要為其命名@Service("……"),也就是給了這個實現類一個id,像這樣:

@Service("us1") public class UserServiceImpl implements UserService { …… } 

這種情況下我們用@Autowired注入時也需要指定id:

@Autowired @Qualifier("us1") private Userservice userservice; 

綜上所述,我個人認為@Autowired使用在接口上而不是實現類上的原因可能是考慮到了一個接口會有多個實現類的情況,當然這也是基於Spring可以將接口與其實現類自動組裝的功能

轉載自:https://www.cnblogs.com/kingclvry/p/13170926.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM