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 {@Overridepublic 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> {@Overridepublic 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 {@Injectprivate Provider<Service> provider;public static void main(String[] args) {ProviderServiceDemo3 instance = Guice.createInjector(new Module() {@Overridepublic void configure(Binder binder) {binder.bind(Service.class).toProvider(OneServiceProvider.class);}}).getInstance(ProviderServiceDemo3.class);instance.provider.get().execute();// Hello! I'M Service 1!}
}

转载于:https://www.cnblogs.com/mengfanrong/p/5231891.html

Guice 学习(六)使用Provider注入服务( Provider Inject Service)相关推荐

  1. dubbo provider异步_Dubbo学习(六) Dubbo面试问题

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 从服务模型的角度来看,Dubbo采用的是一种非常简单的 ...

  2. angular js一factory,service,provider创建服务

    服务:在AngularJS 中,服务是一个函数或对象 在写控制器的时候,不要复用controller,当我们的controller里面有相同的代码时,此时需要把它抽取成一个服务,所有的服务都符合依赖注 ...

  3. ROS学习笔记六:理解ROS服务和参数

    ROS学习笔记六:理解ROS服务和参数 主要介绍ROS服务和参数,同时使用命令行工具rosservice和rosparam. ROS service service是节点之间互相通信的另一种方式,se ...

  4. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  5. Spring学习资料之 依赖注入(二)

    1.2 属性注入(Field Inject) 1.2.1 基本属性注入 首先来看一个例子.Service.java 1 @ImplementedBy(ServiceImpl.class) 2 publ ...

  6. 避免在 ASP.NET Core 3.0 中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...

  7. Google Guice 一个轻量级的依赖注入框架

    1.美图 2.概述 2.1 背景 在做项目的时候,看见有段代码直接是使用Google Guice 注入了avaitor表达式. 2.1 官网 Github 主页:https://github.com/ ...

  8. JMS学习六(ActiveMQ消息传送模型)

    JMS学习六(ActiveMQ消息传送模型) ActiveMQ 支持两种截然不同的消息传送模型:PTP(即点对点模型)和Pub/Sub(即发布 /订阅模型),分别称作:PTP Domain 和Pub/ ...

  9. Docker学习六:综合实践

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

最新文章

  1. 某程序员大佬北漂16年,从住地下室到身家千万,如今回老家躺平!
  2. flutter重新配置sdk路径_在Android中配置flutter
  3. [2014NoDEA]An Osgood type regularity criterion for the liquid crystal flows
  4. Android开发:程序目录结构详解:activity主要方法等
  5. MFC学习之路之多媒体 --(1) DirectShow
  6. docker改变镜像源
  7. 隐藏与显现_惠州楼盘冷热不均价格涨跌互现 差异化调控作用显现
  8. cvCalcBackProject() 直方图反向投影匹配
  9. 新版谷歌浏览器开启Flash支持,开启flash方法
  10. 一点经验:从五星填数中所学到的
  11. 今日睡眠质量记录77分
  12. 今日科技联播:饿了么与屈臣氏达成合作;iPhone XR需求旺盛
  13. Centos7.2 Apache根据User-Agent设置访问禁止
  14. 毕业生必看:获取就业信息的主要渠道(收藏起来,以免丢失)
  15. 基于MATLAB图像处理
  16. 自定义配置数据源 DataSource
  17. sqlserver战德臣_数据库系统(上):模型与语言答案
  18. 数据库----数据查询
  19. 养子女对养父母和亲生父母都要有赡养义务吗
  20. 台式计算机怎样能搜无线连接,台式机无线网如何显示

热门文章

  1. Ubuntu安装sciki-learn及环境
  2. iOS截取视频预览图,截图方向错误的解决
  3. CSS 设置背景颜色透明,文字不透明
  4. POST 一张 图像的调试来认识 http post
  5. 细说嵌入式Linux文件系统的制作方法
  6. CCIE Security考试升级了
  7. [Java] 蓝桥杯ADV-102 算法提高 单词个数统计
  8. 【iOS开发】理解IBOutlet、Outlet、referencing outlet、outlet connection
  9. php server 不支持,SQL server不支持utf8 php却用utf8的矛盾问题解决方法
  10. python如何存储numpy数组_python – 如何将numpy数组作为对象存储在pandas数据框中?...