zoukankan      html  css  js  c++  java
  • @BindingAnnotation

    (1) 如果 一个接口只有一个实现,使用这种连接注解就可以:
      bind(XXInterface.class).to(XXImpl.class);

    @Inject
       XXInterface xxInterface

    (2) 当一个接口由多个实现的时候,上面的@Inject根本不知道怎么绑定,这个时候可以使用自定义的绑定注解BindingAnnotation
    public class AnimalModule extends AbstractModule {
        @Override
        protected void configure() {
            bind(Animal.class).annotatedWith(Cat.class).toInstance(new Animal("Meow"));
            bind(Animal.class).annotatedWith(Dog.class).toInstance(new Animal("Woof"));
        }
    
        @Provides
        List<Animal> provideAnimalList(@Cat Animal cat, @Dog Animal dog) {
            List<Animal> animals = new ArrayList<Animal>();
            animals.add(cat);
            animals.add(dog);
            return animals;
        }
    
        public static void main(String[] args) {
            List<Animal> animals = Guice.createInjector(new AnimalModule()).getInstance(Key.get(new TypeLiteral<List<Animal>>() {
            }));
            for (Animal animal : animals) {
                System.out.println(animal);
            }
        }
    }
    

    Annotations :  如下的Cat和Dog是两个绑定注解。

    @Retention(value = RetentionPolicy.RUNTIME)
    @BindingAnnotation
    public @interface Cat {
    }

    @Retention(value = RetentionPolicy.RUNTIME)
    @BindingAnnotation
    public @interface Dog {
    }

    Output :

    Animal{sound='Meow'}
    Animal{sound='Woof'}
  • 相关阅读:
    Python面向对象5:类的常用魔术方法
    吴恩达机器学习笔记27-样本和直观理解2(Examples and Intuitions II)
    python之面向对象
    python之正则表达式
    python之模块
    python之函数
    python之基础
    python之入门
    Git+码云安装
    python,pycharm环境安装
  • 原文地址:https://www.cnblogs.com/liufei1983/p/9987238.html
Copyright © 2011-2022 走看看