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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Vue(10)表单输入绑定v-model「建议收藏」

    Vue(10)表单输入绑定v-model「建议收藏」v-modelv-model指定可以实现表单值与属性的双向绑定。即表单元素中更改了值会自动的更新属性中的值,属性中的值更新了会自动更新表单中的值绑定的属性和事件v-model在内部为不同的输入元

    2022年7月29日
    11
  • 程序员们千万不要接私活(如何处罚程序员接私活)

    程序员私活网站有哪些?程序员私活一个月能拿多少?程序员在哪接私活?程序员私活app排行,今天为大家分享一些可以接私单的平台,我反正已经赚麻了。

    2022年4月11日
    172
  • 微信二维码登录原理是什么_请使用微信扫描二维码登录

    微信二维码登录原理是什么_请使用微信扫描二维码登录网页登陆是微信4.2以后版本提供的一种全新的登陆方式。用户只需要用手机扫一扫微信网页中的二维码,就能马上实现微信网页登陆。这种登陆方式虽然炫酷,但是多少有些违背直觉:网页端是怎么知道是哪个微信账号

    2022年8月4日
    9
  • Android 消息处理源代码分析(1)

    Android 消息处理源代码分析(1)

    2021年9月12日
    48
  • windows环境搭建web服务器(IIS)

    windows环境搭建web服务器(IIS)windows环境下如何搭建web服务器,百度或者谷歌一下都会有很多教程和资源可以参考。这里我也记载一下过程,便于大家参考。至于什么是web服务器,为什么需要web服务器,这里不太明白的也可以百度一下。简单的说就是需要一个能够处理HTTP协议的互联网程序,当做好一个网站后将其放在这个程序包里。如果指定了这个程序所在电脑的IP地址,就可以用浏览器来显示这个网站了。通常这个程序所在的电脑位置我们称之为…

    2022年5月22日
    49
  • TextMate 激活成功教程

    TextMate 激活成功教程网上google来两个方法,如下:(目的还只是个人学习只用,如果今后用于商业目的,一定支持正版)方法1:关于TextMate的注册这个号称TheMissingEditorfor Mac OSX的编辑器我就不介绍了,我就说说如何注册吧。第一种方法:花39欧元第二种方法:UninstallfirstandInstalagain,justopenthe TextMate unix

    2022年7月13日
    15

发表回复

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

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