如果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