場景:使用 @Autowired 的時候,到底是寫接口還是實現類?
答案:寫的接口
解析:來自網友的回答 :這個其實是創建了實現類的對象但引用了接口類型,即 "InjectionDao injectionDao = new InjectionDaoImpl ()", 這個其實是 Java 多態性(向上轉型)的一種應用。在實現類處加 @Repository 注解,意思就是 new InjectionDaoImpl (), 而在 InjectionServiceImpl 中定義屬性 InjectionDAO injectionDAO 就是將 new 出來的這個 InjectionDaoImpl 對象向上轉型為 InjectionDao 類型。
注意:
若一個接口被多個實現類,實現的時候
@Autowired,Spring 會按 byType 的方式尋找接口的實現類,將其注入。存在多個實現類,應該指定名字,可以通過 byName 注入的方式。可以使用 @Resource 或 @Qualifier 注解。
例如:
@Service("menuService1") public class MenuServiceImpl implements IMenuService @Service("menuService2") public class MenuServiceImpl implements IMenuService @Autowired @Qualifier("menuService1") private IMenuService menuService; @Autowired @Qualifier("menuService2") private IMenuService menuService;