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!
    }
}
时间: 2024-10-08 20:25:55

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

angularjs学习笔记--$http、数据渲染到表格、路由、依赖注入、provider

1—$http 可以从服务器中获取更大的数据集,这里使用angularjs的内置服务称为$http.使用angularjs的依赖注入为phoneList组件的控制器提供服务. 在我们的控制器中使用angularjs的$http服务,向我们的web服务器发出http请求,以获取文件中的数据. app/phone-list/phone-list.component1.js: angular.module('phoneList').component('phoneList',{ templateUrl

Ionic2学习笔记(5):Provider

作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5547646.html ? ? Provider是一种为App提供数据源的方式, 举个例子: 我们从: https://www.reddit.com/r/gifs/top/.json?limit=10&sort=hot 获取Json格式的数据,并在程序启动的时候,在控制台打印获取的数据信息: 进入项目目录:cd MyFirstApp 创建一个Provider:ionic g provider New

Angularjs 自定义服务 provide 里 provider 方法 以及 factory、 service 方法以及 provider 供应商的概念

Angularjs 自定义服务 provide 里 provider 方法 以及factory. service 方法以及 provider 供应商的概念 学习要点:1. Angularjs 中的 provider 方法2. Angularjs 中的 factory 方法3. Angularjs 中的 service 方法4. provider 供应商的概念5. 研究 ionic 代码中的 services 当你初试 Angular 时,很自然地就会往 controller 和 scope 里堆

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

angularjs框架学了有一段时间了,感觉很好用.可以把angularjs的app理解成php的class,controller是控制器,而内置服务和自定义服务就可以理解成models了.angularjs的内置服务多,例如:$scope,$rootScope,$http,$q,$resource,$routeProvider等等,下面来说一下怎么自定义服务 一,factory,service,provider自定义服务,services.js 'use strict'; /* Service

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

可以认为provider有三个部分: 第一部分是私有变量和私有函数,这些变量和函数会在以后被修改. 第二部分是在app.config函数里可以访问的变量和函数,所以,他们可以在其他地方使用之前被修改.注意,这些变量和函数一定要添加到this上面才行. 第三部分是在控制器里可以访问的变量和函数,通过$get函数返回. 当使用 provider创建服务的时候,唯一可以让控制器访问的属性和方法是在$get()函数里返回的属性和方法. [参考资料:http://sanwen8.cn/p/159AEt2.

Motan在服务provider端用于处理request的线程池

最近开始重新看motan的源码,打算花一年的时间来分析每个模块每个功能的代码实现,坚持写一个motan分析系列. 因为没有思路,只能一个片段一个片段的看,等到有了一定的积累,再将看过的代码串起来一起分析,形成完整的思路. 第一篇是要回答自己的一个疑问,motan在服务provider端的线程模型是什么?request到达服务provider端之后,被哪个线程处理? motan的tcp通信框架用的是netty,netty的线程模型是reactor模型.由一个Acceptor线程负责channel的

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

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body ng-app="myApp"> <div ng-controller="firstController"> <ul>

在angular2服务中注入服务

http://kittencup.com/javascript/2015/11/11/%E5%9C%A8angular2%E6%9C%8D%E5%8A%A1%E4%B8%AD%E6%B3%A8%E5%85%A5%E6%9C%8D%E5%8A%A1.html 如果你关注我们的文章 Angular2中的依赖注入,你知道DI系统在Angular中是如果运作的,它利用在我们代码上通过注解添加metadata来获取所有关于依赖的信息来解决我们的依赖关系 Angular 2 应用基本上可以用任何语言编写.只

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

用AngularJS做项目,但凡用过什么service啊,factory啊,provider啊,开始的时候晕没晕?!晕没晕?!感觉干的事儿都差不多啊,到底用哪个啊?!别告诉我你们几个就是为了跟我炫耀兄弟多!! 好吧...也许是我的问题,脑仁儿确实不够大,反正我是晕的直挠墙~ 那到底什么时候该请他们谁出场啊? 经过挠墙之后挠官网文档挠google挠源码挠例子试验,终于让我把他们的区别给挠出来了!(得意的笑--) 首先,provider, value, constant, service, fact