zoukankan      html  css  js  c++  java
  • Guice 学习(六)使用Provider注入服务( Provider Inject Service)

    1、定义接口

    package com.guice.providerInject;
    
    import com.google.inject.ProvidedBy;
    
    public interface Service {
        public void execute();
    }
    
    

    2、定义实现类

    package com.guice.providerInject;
    
    public class OneService implements Service {
        @Override
        public void execute() {
            System.out.println("Hello!  I'M Service 1!");
    
        }
    }

    3、Provider实现类

    package com.guice.providerInject;
    
    import com.google.inject.Provider;
    
    /**
     * TODO : 每次新建一个新的OneService对象出来
     * 
     * @author E468380
     */
    public class OneServiceProvider implements Provider<Service> {
    
        @Override
        public Service get() {
            return new OneService();
        }
    
    }
    

    4、ProviderServiceDemo 測试类

    package com.guice.providerInject;
    
    import com.google.inject.Binder;
    import com.google.inject.Guice;
    import com.google.inject.Inject;
    import com.google.inject.Module;
    
    /**
     * 使用上面OneServiceProvider来新建实例 当然假设想自己主动注入(不使用Module手动关联)服务的话。能够使用@ProviderBy注解。

    * */ public class ProviderServiceDemo { @Inject private Service service; public static void main(String[] args) { ProviderServiceDemo instance = Guice.createInjector(new Module() { @Override public void configure(Binder binder) { binder.bind(Service.class).toProvider(OneServiceProvider.class); } }).getInstance(ProviderServiceDemo.class); instance.service.execute();// Hello! I'M Service 1! } }

    5、ProviderServiceDemo2測试类

    假设不想使用Module手动关联服务的话。能够使用@ProviderBy注解。

    package com.guice.providerInject;
    
    import com.google.inject.ProvidedBy;
    
    @ProvidedBy(OneServiceProvider.class)
    public interface Service {
        public void execute();
    }
    package com.guice.providerInject;
    
    import com.google.inject.Guice;
    
    public class ProviderServiceDemo2 {
        public static void main(String[] args) {
            ProviderServiceDemo2 instance = Guice.createInjector().getInstance(ProviderServiceDemo2.class);
            // instance.service.execute(); //发现不起作用不知何解 ?
        }
    }
    

    6、ProviderServiceDemo3測试类

    package com.guice.providerInject;
    
    import com.google.inject.Binder;
    import com.google.inject.Guice;
    import com.google.inject.Inject;
    import com.google.inject.Module;
    import com.google.inject.Provider;
    
    /**
     * TODO :能够注入Provider而不是注入服务 
     * ◇因为我们OneServiceProvider每次都是构造一个新的服务出来,
     * 因此在类ProviderServiceDemo3中的provider每次获取的服务也是不一样的。
     * 
     * @author E468380
     */
    public class ProviderServiceDemo3 {
        @Inject
        private Provider<Service> provider;
    
        public static void main(String[] args) {
    
            ProviderServiceDemo3 instance = Guice.createInjector(new Module() {
    
                @Override
                public void configure(Binder binder) {
                    binder.bind(Service.class).toProvider(OneServiceProvider.class);
                }
            }).getInstance(ProviderServiceDemo3.class);
    
            instance.provider.get().execute();// Hello! I'M Service 1!
        }
    }
    
  • 相关阅读:
    io学习
    asp.net文件上传进度条研究
    asp.net页面中的Console.WriteLine结果如何查看
    谨慎跟随初始目的不被关联问题带偏
    android 按钮特效 波纹 Android button effects ripple
    安卓工作室 日志设置
    安卓工作室 文件浏览器 android studio File browser
    一个新的Android Studio 2.3.3可以在稳定的频道中使用。A new Android Studio 2.3.3 is available in the stable channel.
    新巴巴运动网上商城 项目 快速搭建 教程 The new babar sports online mall project quickly builds a tutorial
    码云,git使用 教程-便签
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5231891.html
Copyright © 2011-2022 走看看