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!
}
}
Guice 学习(六)使用Provider注入服务( Provider Inject Service)的更多相关文章
- Java开发学习(六)----DI依赖注入之setter及构造器注入解析
一.DI依赖注入 首先来介绍下Spring中有哪些注入方式? 我们先来思考 向一个类中传递数据的方式有几种? 普通方法(set方法) 构造方法 依赖注入描述了在容器中建立bean与bean之间的依赖关 ...
- Ionic2学习笔记(5):Provider
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5547646.html Provider是一种为App提供数据源的方式, 举个 ...
- angularjs factory,service,provider 自定义服务的不同
angularjs框架学了有一段时间了,感觉很好用.可以把angularjs的app理解成php的class,controller是控制器,而内置服务和自定义服务就可以理解成models了.angul ...
- AngularJS 服务 provider factory service及区别
一.概念说明 1.服务是对公共代码的抽象,如多个控制器都出现了相似代码,把他们抽取出来,封装成一个服务,遵循DRY原则,增强可维护性,剥离了和具体表现相关的部分,聚焦于业务逻辑或交互逻辑,更加容易被测 ...
- angularJS——自定义服务provider之$get
可以认为provider有三个部分: 第一部分是私有变量和私有函数,这些变量和函数会在以后被修改. 第二部分是在app.config函数里可以访问的变量和函数,所以,他们可以在其他地方使用之前被修改. ...
- ionic准备之angular基础———服务provider 和 factory和service(9)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 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 ...
- springboot+dubbo之多端口注入服务
前面介绍了,springboot+dubbo基础整合,这篇介绍多端口注入服务. springboot使用@Bean注入dubbo服务,当你是单一的ProviderConfig实例,dubbo的@Ser ...
- 转载:[AngularJS系列] 那伤不起的provider们啊~ (Provider, Value, Constant, Service, Factory, Decorator)
来源:http://hellobug.github.io/blog/angularjs-providers/ 用AngularJS做项目,但凡用过什么service啊,factory啊,provide ...
随机推荐
- 线程异常:undefined reference to 'pthread_create' 处理
源代码: #include <stdio.h> #include <pthread.h> #include <sched.h> void *producter_f ...
- js_day14
- 解决System.Data.SQLite兼容32位和64位问题
将当前说明文档的目录下的x64.x86目录和System.Data.SQLite.dll文件复制到您的应用程序根目录中(注意更新引用,引用System.Data.SQLite.dll即可,两目录中的不 ...
- KindEditor放在包含模版页的页面里不显示解决方案
由于用了母版页,内容页服务器控件(是服务器控件哦)的id会被重写,我这里运行中查看源代码,控件的id变成了“ContentPlaceHolder1_content1”. <asp:TextBox ...
- VPS,虚拟主机,云主机,独立服务器区别
作者:张朝权链接:http://www.zhihu.com/question/25507629/answer/105594087来源:知乎著作权归作者所有,转载请联系作者获得授权. 独立服务器独立 ...
- sql建立跨服务器链接
select srvname,* from master.dbo.sysservers //创建linkServer exec sp_addlinkedserver 'srv_lnk',' ...
- 硬盘安装ubuntu
本文记录在能够启动到GRUB2启动菜单的前提下硬盘安装ubuntu的方法. 14.04和16.04测试可用. 假设镜像文件放在GPT第一个分区,文件名为ubuntu.iso. 启动到GRUB2菜单后, ...
- python 画正弦曲线
要画正弦曲线先设定一下x的取值范围,从0到2π.要用到numpy模块. numpy.pi 表示π numpy.arange( 0 , 2π ,0.01) 从0到2π,以0.01步进. 令 x=num ...
- 使用ARM和VMSS创建自动扩展的web集群
在很多的商业场景中,用户的访问,峰值时间都是很难预测的,尤其是做一些市场推广活动和促销的时候,到底部署什么规模的web集群合适,这一直是个问题,部署过量会造成高成本和资源不必要的浪费,部署过少,如果到 ...
- jQuery验证表单格式
工作之余整理一些工作中编写的代码,记录自己工作中的技术要点,便于自己记忆已经整合.以下是关于此jQuery验证的一些标记以及使用方法: 整个js代码都放入jquery_validate_1.1.0.j ...