Springboot

一个接口有多个实现类如何找到注入的那个实现类?

img

img

我调试不知道那个是他的注入类

可以使用@Qualifier注解来指定注入的实现类,例如:

public interface UserService {
  void addUser(User user);
}

@Service
@Qualifier("userServiceImpl1")
public class UserServiceImpl1 implements UserService {
  @Override
  public void addUser(User user) {
    // 实现添加用户的逻辑
  }
}

@Service
@Qualifier("userServiceImpl2")
public class UserServiceImpl2 implements UserService {
  @Override
  public void addUser(User user) {
    // 实现添加用户的逻辑
  }
}

@Service
public class UserServiceConsumer {
  @Autowired
  @Qualifier("userServiceImpl1")
  private UserService userService1;

  @Autowired
  @Qualifier("userServiceImpl2")
  private UserService userService2;

  // 省略其他方法
}

在UserServiceConsumer中,使用@Qualifier注解来指定注入的实现类,可以根据需要注入不同的实现类。另外,也可以使用@Primary注解来指定默认的实现类,如果没有指定@Qualifier注解,则会注入默认的实现类。
参考于:Cursor 应用

在用到这个字段的地方打个断点,然后看看它的具体类型

  • 通过调试来找: 在接口类 对应的方法上打个断点, 运行程序,自动会跳转到 对应的实现类的实现方法中。
  • 通过看代码实现: 接口类调用的地方,肯定有接口类是怎么初始化的逻辑的,那里能找到

上面是最简单的,如果你能一眼丁真注入的beanId,然后去beanFactory里面直接找就能直接定位到运行时对象