<>场景:使用 @Autowired 的时候,到底是写接口还是实现类?

<>答案:写的接口

<>当实现类唯一时,表面上注入接口,其实注入实现类

<>当实现类多个时,通过@Service(“menuService1”)指定实现类

<>解析:

这个其实是创建了实现类的对象但引用了接口类型,

即 “InjectionDao injectionDao = new InjectionDaoImpl ()”, 是 Java 多态性(向上转型)的一种应用。

在实现类处加 @Repository 注解,意思就是 new InjectionDaoImpl (),

而在 InjectionServiceImpl 中定义属性 InjectionDAO injectionDAO 就是将 new 出来的这个
InjectionDaoImpl 对象向上转型为 InjectionDao 类型。

<>注意:

若一个接口被多个实现类,实现的时候,@Autowired,Spring 会按 byType
的方式寻找接口的实现类,将其注入。存在多个实现类,应该指定名字,可以通过 byName 注入的方式。可以使用 @Resource 或 @Qualifier
注解。
//实现类1 @Service("menuService1") public class MenuServiceImpl implements
IMenuService //实现类2 @Service("menuService2") public class MenuServiceImpl
implements IMenuService //注入接口,相当于new一个实现类,指定名称menuService1实现类 @Autowired @
Qualifier("menuService1") private IMenuService menuService;
//注入接口,相当于new一个实现类,指定名称menuService2实现类 @Autowired @Qualifier("menuService2")
private IMenuService menuService;

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信