相关文章推荐
潇洒的茶壶  ·  自定义tabBar | 微信开放文档·  14 小时前    · 
潇洒的茶壶  ·  tabBar - 移动开发平台mPaaS ...·  14 小时前    · 
  • 方法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...