抛出总结:
- 同一个接口有多个实现类的处理。
- 使用@Resource(name="实现名")或者@Autowired+@Qualifier("实现名")
- 同一个类实现多个接口,当其方法名相同时。
- 第一种情况:返回值 修饰符、参数个数一样
结论: 没有注意地方。各调各的。 - 第二种情况:返回值不同 修饰符、参数个数、类型一样
结论: 编译不通过 - 第三种情况:返回值相同 修饰符一样 参数个数、类型不一样
结论: 全部重写
- 第一种情况:返回值 修饰符、参数个数一样
- 一个类已经继承了某个父类的同时实现了多个接口,有相同方法时
- 最后结论:没有语法的错误,那么就是说明继承下来的方法实现了接口中的同名方法
下面是论证过程:
1. 同一个接口有多个实现类的处理
仅使用@Autowired会报错,因为默认按类型查找,只需要一个,会找到多个实现类。解决方法:
1.@Resource(name="实现名");
- @Autowired
@Qualifier("实现名")
下面看具体例子:
//接口
//接口
public interface ShareService {
String getResult();
}
//实现类1
@Service
public class ShareServiceImp01 implements ShareService {
@Override
public String getResult() {
String result="---------------000001-------------------------";
return result;
}
}
//实现类2
@Service
public class ShareServiceImp02 implements ShareService {
@Override
public String getResult() {
String result="---------------000002-------------------------";
return result;
}
}
controller
@RestController
@Slf4j
public class ShareController {
//方法1
//@Resource(name="shareServiceImp02")
//ShareService shareService;
//方法2
@Autowired
@Qualifier("shareServiceImp01")
ShareService shareService;
@RequestMapping("/share")
public void getShare() {
String result=shareService.getResult();
log.info("结果为{}", result);
}
}
输出结果
2.同一个类实现多个接口,当其方法名相同时
第一种情况:返回值 修饰符、参数个数一样
结论: 没有注意地方。各调各的
实现类
@Service
public class ShareServiceImp04 implements ShareService01, ShareService02 {
@Override
public String getResult() {
String result="---------------000001-------------------------";
return result;
}
}
接口1:
public interface ShareService01 {
String getResult();
}
接口2:
public interface ShareService02 {
String getResult();
}
controller
//同一个类实现多个接口
@Resource(name = "shareServiceImp04")
ShareService01 shareService01;
@Resource(name = "shareServiceImp04")
ShareService02 shareService02;
@RequestMapping("/share")
public void getShare() {
String result01=shareService01.getResult();
String result02=shareService02.getResult();
log.info("01结果为{}", result01);
log.info("02结果为{}", result02);
}
第二种情况:返回值不同 修饰符、参数个数、类型一样
结论: 编译不通过
接口1:
接口2:
实现类:编译出错
第三种情况:返回值相同 修饰符一样 参数个数、类型不一样
结论: 全部重写
接口
实现类
3.一个类已经继承了某个父类的同时实现了多个接口,有相同方法时
最后结论:没有语法的错误,那么就是说明继承下来的方法实现了接口中的同名方法
输出验证结果: