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!
}
}

Guice 学习(六)使用Provider注入服务( Provider Inject Service)的更多相关文章

  1. Java开发学习(六)----DI依赖注入之setter及构造器注入解析

    一.DI依赖注入 首先来介绍下Spring中有哪些注入方式? 我们先来思考 向一个类中传递数据的方式有几种? 普通方法(set方法) 构造方法 依赖注入描述了在容器中建立bean与bean之间的依赖关 ...

  2. Ionic2学习笔记(5):Provider

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5547646.html             Provider是一种为App提供数据源的方式, 举个 ...

  3. angularjs factory,service,provider 自定义服务的不同

    angularjs框架学了有一段时间了,感觉很好用.可以把angularjs的app理解成php的class,controller是控制器,而内置服务和自定义服务就可以理解成models了.angul ...

  4. AngularJS 服务 provider factory service及区别

    一.概念说明 1.服务是对公共代码的抽象,如多个控制器都出现了相似代码,把他们抽取出来,封装成一个服务,遵循DRY原则,增强可维护性,剥离了和具体表现相关的部分,聚焦于业务逻辑或交互逻辑,更加容易被测 ...

  5. angularJS——自定义服务provider之$get

    可以认为provider有三个部分: 第一部分是私有变量和私有函数,这些变量和函数会在以后被修改. 第二部分是在app.config函数里可以访问的变量和函数,所以,他们可以在其他地方使用之前被修改. ...

  6. ionic准备之angular基础———服务provider 和 factory和service(9)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. dubbo服务provider方打印警告日志,getDeserializer - Hessian/Burla 'xxx' is an unknown class

    2018-09-12 16:16:44 WARN [New I/O worker #1] SerializerFactory.java:652 getDeserializer - Hessian/Bu ...

  8. springboot+dubbo之多端口注入服务

    前面介绍了,springboot+dubbo基础整合,这篇介绍多端口注入服务. springboot使用@Bean注入dubbo服务,当你是单一的ProviderConfig实例,dubbo的@Ser ...

  9. 转载:[AngularJS系列] 那伤不起的provider们啊~ (Provider, Value, Constant, Service, Factory, Decorator)

    来源:http://hellobug.github.io/blog/angularjs-providers/ 用AngularJS做项目,但凡用过什么service啊,factory啊,provide ...

随机推荐

  1. 为人们服务的asp.net 验证控件

    ASP.NET是微软推出的WEB开发工具,他有很强大的功能,今天看视频讲到验证控件这一部分,真的感受到了微软全心全意为人民服务了.越来越佩服微软了,人家都设计出来了,咱们一定要会用才可以啊,不然太…. ...

  2. 深入浅出理解iOS经常使用的正則表達式—基础篇[Foundation]

    參考资料:cocoachina的zys475481075的文章 几个单词 Regular ['regjʊlə]adj. 定期的:有规律的 Expression[ɪk'spreʃ(ə)n; ek-] n ...

  3. Android开发所有视频教程汇总

    1.Mars的Android开发视频教程作者讲解的很详细,很全面,系统.以前出了两套视频,分别是<Java4Android视频教程>.<Android视频教程>,以及最新刚新出 ...

  4. 浪潮服务器通过ipmitool获取mac地址

    一.GPU服务器 #配置两个主板集成千兆四个外插PCI万兆网卡# 板载网卡可以使用命令获取到:RAW 0X30 0X21 就可以读取到第一块网卡的MAC,就是以下返回值的后6位. 0c,c4,7a,5 ...

  5. c#基础: 线程的初级用法总结

    启动一个线程的两种方法:     a.使用无参的方法       Thread thread1 = new Thread(new ThreadStart("调用的方法名")):   ...

  6. C#图像处理(2):给图片加白边

    C#图片处理给图片添加白边: /// <summary> /// 在图片上方加入白边 /// </summary> /// <param name="Img&q ...

  7. mysql-5.7.12-winx64.zip Windows (x86, 64-bit), ZIP Archive版免安装配置

    1.下载免安装版压缩包 下载地址:http://dev.mysql.com/downloads/mysql/ 选择符合你的操作系统的版本,点击download进入下载页面 不用注册也可以点击下载连接进 ...

  8. CentOS FTP服务器权限控制

    在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患.可以通过以下三条配置文件来控制用户切换目录. chroot_list_enable=YES/NO(NO) 设 ...

  9. (原)ubuntu16重装显卡驱动后,torch中的问题

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6030232.html 参考网址: https://github.com/torch/cutorch/i ...

  10. Android App 沉浸式状态栏解决方案

    伴随着 Android 5.0 发布的 Material Design,让 Android 应用告别了以前的工程师审美,迎来了全新的界面,灵动的交互,也让越来越多的 App 开始遵从 material ...