java interface有多个implement的情况下,@Inject调用实现类的选择

java interface有多个implement的情况下,@Inject调用实现类的选择javainterface有多个implement的情况下,@Inject调用实现类的选择

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

java原生代码:

public interface InterfaceService<T extends BaseObject> {

    void getServiceName(T t);

}

public class AImplementService implements InterfaceService<AObject> {

    @Override
    public void getServiceName(AObject a) {
        System.out.println("AImplementService.getServiceName");
    }

}

public class BImplementService implements InterfaceService<BObject> {

    @Override
    public void getServiceName(BObject b) {
        System.out.println("BImplementService.getServiceName");
    }

}

public class InterfaceServiceTest {

    @Inject
    InterfaceService<AObject> serviceA;

    @Inject
    InterfaceService<BObject> serviceB;

    @Test
    public void test() {
        serviceA.getServiceName(new AObject());
        serviceB.getServiceName(new BObject());
    }

}

结果:

AImplementService.getServiceName
BImplementService.getServiceName

当框架不支持多实现,但是又需要面向接口编程,需要Inject接口,则有另一种方式

public interface InterfaceService {
    void get() ;
}

public interface InterfaceServiceA extends InterfaceService {}

public class AImplementService implements InterfaceServiceA {
    public void get() {
        //...
     }
}

public interface InterfaceServiceB extends InterfaceService {}

public class BImplementService  implements InterfaceServiceB {
    public void get() {
        //...
     }
}

然后使用

@Inject
private InterfaceServiceA interfaceServiceA;

@Inject
private InterfaceServiceB  interfaceServiceB;

以下转自51CTO

@BindingAnnotation实现多实现注入

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@BindingAnnotation
public @interface Changchun {
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@BindingAnnotation
public @interface Jilin {
}

public class ChangchunSunyangImpl implements Sunyang{
public void print() {
System.out.println("三扬长春");
}
}

public class JilinSunyangImpl implements Sunyang{
public void print() {
System.out.println("三扬吉林");
}

public class Bind implements Module {
public void configure(Binder binder) {
binder.bind(Sunyang.class).annotatedWith(Changchun.class).to(
ChangchunSunyangImpl.class);
binder.bind(Sunyang.class).annotatedWith(Jilin.class).to(
JilinSunyangImpl.class);
}
}

public class InjectBind {
@Inject
@Changchun
Sunyang changchunSunyang;

@Inject 
@Jilin
Sunyang jilinSunyangImpl;

public static void main(String[] args){
InjectBind ib=Guice.createInjector(new Bind()).
getInstance(InjectBind.class);
ib.changchunSunyang.print();
ib.JilinSunyang.print();
}
}
spring的@Autowire @Qualifier @Resource @Component使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180129.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 全012路规律_11选5判断012路的方法

    全012路规律_11选5判断012路的方法堆题目链接将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被

    2022年8月8日
    8
  • linux日志审计系统_linux查看审计记录命令

    linux日志审计系统_linux查看审计记录命令Linux日志审计常用命令find、grep、egrep、awk、sedLinux中常见日志以及位置位置名称/var/log/cron记录了系统定时任务相关的日志/var/log/auth.log记录验证和授权方面的信息/var/log/secure同上,只是系统不同/var/log/btmp登录失败记录使用lastb命令查看/var/log/wtmp登录失成功记录使用last命令查看/var/log/lastlog最后一次登录

    2025年6月15日
    4
  • [C语言]背包问题「建议收藏」

    [C语言]背包问题「建议收藏」0-1背包问题 参考:http://blog.csdn.net/liwenjia1981/article/details/5725579http://blog.csdn.net/dapengbusi/article/details/7463968动态规划解法借个图助于理解从背包容量为0开始,1号物品先试,0,1,2,的容量都不能放.所以置0,背包容量为3则里面放4

    2022年7月14日
    16
  • JDK1.8+版本环境安装

    JDK1.8+版本环境安装

    2021年6月3日
    140
  • webstrom 2022激活码_在线激活

    (webstrom 2022激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月1日
    183
  • 文本分类算法比较与总结

    文本分类算法比较与总结本文对常用的几种文本分类算法进行了比较与总结 主要阐述它们之间的优劣 为算法的选择提供依据 nbsp 一 Rocchio 算法 nbsp Rocchio 算法应该算是人们思考文本分类问题最先能想到的 也是最符合直觉的解决方法 基本的思路是把一个类别里的样本文档各项取个平均值 例如把所有 体育 类文档中词汇 篮球 出现的次数取个平均值 再把 裁判 取个平均值 依次做下去 就可以得到一个新的向量 形象的称之为 质心 质

    2025年7月17日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号