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!
        }
    }
    
  • 相关阅读:
    你说什么都不队 实验七 团队作业3:团队项目需求分析与原型设计
    你说什么都不队 实验六团队作业2:小型医疗机构诊疗管理系统
    你说什么都不队 实验五 团队作业1:软件研发团队组建与软件案例分析
    Java并发编程中的设计模式解析(二)一个单例的七种写法
    Java并发编程之ThreadGroup
    基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程
    Java并发编程之线程安全、线程通信
    Java并发编程中的设计模式解析(一)
    Java并发编程之线程生命周期、守护线程、优先级、关闭和join、sleep、yield、interrupt
    Java并发编程之线程创建和启动(Thread、Runnable、Callable和Future)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5231891.html
Copyright © 2011-2022 走看看