-
方法1
指明实现类的优先级
在写实现类的时候事先指明实现类的优先级,注入的时候就会使用优先级高的实现类。在调用的类中注入接口,默认使用的是Primary 标注的实现类的方法
如:
@Service("dog")
@Primary
public class Dog implements Animal {
.......
注
:同一个接口的多个实现类,最多只能有一个添加该注解
此方法 我用的不多
-
方法2
通过@Autowride和@Qualifier两个注解配合使用
如:
在调用处使用这两个注解
@Autowired
@Qualifier("dog")
private Animal animal;
注
:注解@Qualifier内的值是实现类的默认名
-
方法3
使用@Resource注解,默认类名区分
如:
在调用处使用此注解
@Resource(name = "dog")
private Animal animal;
注
:注解@Qualifier内的值是实现类的默认名
-
方法4
使用@Resource注解,根据@Service区分
如:
在调用处使用此注解
@Resource(name = "dogImpl")
private Animal animal;
注
:注解@Qualifier内的值是实现类中@Service指定的名字
-
方法5
直接new 一个实例
如:
在调用处使用
private Animal animal = new Dog();
此方法用的也不多
如果大家有哪些更好的方式欢迎评论
A用户
调用
Aservice
实现
类
,B用户
调用
Bservice
实现
类
1、使用switch-case
public static Person printPerson(int kind) {
Person p = null;
switch (kind) {
case FIRST: p = new A("人1");break;
case SECOND...
一般我们用第二种方式有
一个
好处,如果以后要改动,那么只需要修改其引用的实例,改动较少!
举个例子:A
接口
,A1,A2,A3
实现
A
接口
,有
一个
eat方法,A1:吃饭,A2:吃鱼,A3:吃肉
需要得到"吃肉",那么 A a = n
需要根据具体的应用场景和需求选择适合的方式来
调用
不同的
实现
类
。在代码中,根据
接口
类
型、条件判断、集合遍历或动态获取实例等方式,可以灵活地
调用
不同的
实现
类
的方法。
今天上厕所的时候刷到别人说到面向
接口
编程和面向业务编程,然后就想到了
接口
的特性,随后想到
一个
接口
可以有
多个
实现
类
,有
多个
实现
类
的话,控制层是怎么
调用
其中的
实现
类
的呢?因为以前没遇到过这个问题,自己的实际开发中
一个
接口
只有
一个
实现
类
,然后就想到万一
一个
接口
有两个以上的
实现
类
的话,控制层自动注入的
实现
类
到底是哪
一个
的问题。
(然后还想到,自己写的每
一个
项目,都是
一个
接口
一个
实现
类
,根本没有利用到
接口
设计的优点,当然这不是本题所讨论的重点,但是可以做个小标记供以后进阶学习。)
下面开始介绍我网上搜集到的三种方式。
public class UserServiceImplA implements UserService {
public void findUser(){
System.out.print("UserServiceImplA");
实现
类
B:
@Service
public class UserServiceImplB implemen
背景:学习security的时候查看源码,有个地方采用了
接口
.方法 的方式,通过ctrl+alt+b快捷键发现
接口
有
多个
实现
类
这种情况恰可以使用debug,来查看具体
调用
的是哪个
实现
类
的方法,操作如下:
1.打断点
2.以debug模式运行项目
3.在断点处,复制想要查看的代码,并在debugger控制台打印出来(回车键)
4.查看其真实
类
型
到此我知道了,其真实
类
型是Provider...