atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29

1. 三 绑定方式的介绍1

2. To接口,链式绑定,用的最多的1

3. toConstructor1

4. toInstance生成的都是单例对象的...3

5. toProvider生成非单例对象3

5.2. 注解(Annotations)绑定3

5.3. 实例绑定(str,int绑定)4

5.4. 无目标绑定4

6. 参考5

重大的描述

1. 三 绑定方式的介绍

1. 在自定义的Module类中进行绑定

1. 1 在configure方法中绑定

1. 11 链式绑定

2. 12 注解Annotations绑定

1. 121 自己写Annotations的方式

2. 122 使用Named的方式

3. 13 实例绑定

4. 14 Provider绑定

5. 15 无目标绑定

6. 16 指定构造函数绑定

7. 17 Built-in绑定

2. 2 在Provides方法中进行绑定

2. 在父类型中进行绑定

1. 1 ImplementedBy

2. 2 ProvidedBy

2. To接口,链式绑定,用的最多的

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

3. toConstructor

这种绑定方式主要用于不方便用注解@Inject修饰目标类型的构造函数的时候。比如说目标类型是第三方提供的类型,或者说目标类型中有多个构造函数,并且可能会在不同情况采用不同的构造函数。

在configure方法中,将一种类型绑定到另外一种类型的过程中,指定目标类型用那种构造函数生成对象

在configure方法中,将一种类型绑定到另外一种类型的过程中,指定目标类型用那种构造函数生成对象。

?

1

2

3

4

5

6

7

8

9

10

11

public class BillingModule extends AbstractModule {

@Override

protected void configure() {

try {

bind(TransactionLog.class).toConstructor(

DatabaseTransactionLog.class.getConstructor(DatabaseConnection.class));

} catch (NoSuchMethodException e) {

addError(e);

}

}

}

这种绑定方式主要用于不方便用注解@Inject修饰目标类型的构造函数的时候。比如说目标类型是第三方提供的类型,或者说目标类型中有多个构造函数,并且可能会在不同情况采用不同的构造函数。

4. toInstance生成的都是单例对象的...

toInstance(new object());

5. toProvider生成非单例对象

5.1.1.1.1. Provider绑定

在下面会介绍基于@Provides方法的绑定。其实Provider绑定是基于@Provides方法绑定的后续发展,所以应该在介绍完基于@Provides方法绑定之后再来介绍,不过因为Provider绑定也是在configure方法中完成的,而本文又是按照绑定的位置来组织的,因为就把Provider绑定放在这了,希望大家先跳到后面看过基于@Provides方法的绑定再回来看这段。

在使用基于@Provides方法绑定的过程中,如果方法中创建对象的过程很复杂,我们就会考虑,是不是可以把它独立出来,形成一个专门作用的类。Guice提供了一个接口:

bd.bind(Connection.class).toProvider(new Provider<Connection>(){

@Override

public Connection get() {

//SessionFactory sessionFactory = HibernateSessionFactory.getSessionFactory();

//Connection c=SessionFactoryUtils.getDataSource(sessionFactory ).getConnection();

try {

return new Hb4JdbcX().getConnection();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new RuntimeException(e);

}

}});

5.1. 注解(Annotations)绑定

链式绑定针对于同样的类型都绑定到同一种目标类型时,非常好用,但是对于一个接口有多种实现的时候,链式绑定就不好区分该用哪种实现了。可以把Annotations绑定方式看作是链式绑定的一种扩展,专门用来解决这种同一个接口有多种实现的问题。Annotations绑定又可以分为两种,一种是需要自己写Annotations,另外一种则简化了一些。

5.2. 实例绑定(str,int绑定)

上面介绍的链式绑定是把接口的class对象绑定到实现类的class对象,而实例绑定则可以看作是链式绑定的一种特例,它直接把一个实例对象绑定到它的class对象上。

[java] view plaincopy

1. bind(String.class)

2.     .annotatedWith(Names.named("JDBC URL"))

3.     .toInstance("jdbc:mysql://localhost/pizza");

4. bind(Integer.class)

5.     .annotatedWith(Names.named("login timeout seconds"))

6.     .toInstance(10);

5.3. 无目标绑定

无目标绑定是链接绑定的一种特例,在绑定的过程中不指明目标,如:

[java] view plaincopy

1. bind(MyConcreteClass.class);

2. bind(AnotherConcreteClass.class).in(Singleton.class);

如果使用注解绑定的话,就不能用无目标绑定,必须指定目标,即使目标是它自己。如:

[java] view plaincopy

1. bind(MyConcreteClass.class).annotatedWith(Names.named("foo")).to(MyConcreteClass.class);

2. bind(AnotherConcreteClass.class).annotatedWith(Names.named("foo")).to(AnotherConcret

无目标绑定,主要是用于与被@ImplementedBy 或者 @ProvidedBy修饰的类型一起用。如果无目标绑定的类型不是被@ImplementedBy 或者 @ProvidedBy修饰的话,该类型一定不能只提供有参数的构造函数,要么不提供构造函数,要么提供的构造函数中必须有无参构造函数。因为guice会默认去调用该类型的无参构造函数

5.3.1.1.1. Built-in绑定

Built-in绑定指的是不用程序员去指定,Guice会自动去做的绑定。目前,Guice所支持的Built-in绑定只有对java.util.logging.Logger的绑定。个人感觉,所谓的Built-in绑定,只是在比较普遍的东西上为大家带来方便的一种做法。

6. 参考

Atitit.guice3 ioc 最佳实践 o9o

Google-Guice入门介绍 - Derekjiang的笔记簿 - 博客频道 - CSDN.NET.htm

atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29的更多相关文章

  1. Spring注解【非单例】

    花了至少一整天的时间解决了这个问题,必须记录这个纠结的过程,问题不可怕,思路很绕弯. 为了能说清楚自己的问题,我都用例子来模拟. 我有一个类MyThread是这样的: @Service public ...

  2. iOS:创建单例对象的两种方式

    单例模式:创建单例对象的两种方式 方式一:iOS4版本之前      static SingleClassManager *singleManager = nil;      +(SingleClas ...

  3. Spring MVC的各种参数绑定方式(请求参数用基础类型和包装类型的区别)(转)

    1.基本数据类型(以int为例,其他类似): Controller代码: @RequestMapping("saysth.do") public void test(int cou ...

  4. spring中如何向一个单例bean中注入非单例bean

    看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...

  5. js、jq事件绑定方式总结——以click事件为例

    一.JavaScript点击事件绑定方法 1.1 HTML onclick事件属性 <button onclick="clickMe(this)">click me&l ...

  6. 一个完整的类用来生成RSACryptoServiceProvider单例类(.NET)

    internal class CcbRsaCryptProvider { private static RSACryptoServiceProvider _providerForSign; priva ...

  7. 【Java面试宝典】说说你对 Spring 的理解,非单例注入的原理?它的生命周期?循环注入的原理, aop 的实现原理,说说 aop 中的几个术语,它们是怎么相互工作的?

    AOP与IOC的概念(即spring的核心) IOC:Spring是开源框架,使用框架可以使我们减少工作量,提高工作效率并且它是分层结构,即相对应的层处理对应的业务逻辑,减少代码的耦合度.而sprin ...

  8. Atitit.guice3 ioc 最佳实践 o9o

    Atitit.guice3 ioc  最佳实践 o9o 1. Guice的优点and跟个spring的比较 1 2. 两个部分:::绑定and注入@Inject 1 3. 绑定所有的方法总结 2 3. ...

  9. 页面之间传值方式的总结,五种方式,通知,block,代理,单例,NSUERDEFALUT,

    首先代码拿上 1:单例 2:通知 3:代理 4:block方法 5:NSUSERDEFAULT(沙盒文件) 先是单例类: .h文件 @interface DataSource : NSObject @ ...

随机推荐

  1. IDL软件初步了解

    软件名称:IDL(交互式数据语言Interactive Data Language) 软件类别:是国产软件,语言类,数据分析类,数据可视化类 语言类别:解释型 作用:可以进行数据处理的可视化等,在大数 ...

  2. codeforces 314E Sereja and Squares

    discription Sereja painted n points on the plane, point number i (1 ≤ i ≤ n) has coordinates (i, 0). ...

  3. 【哈希表】CODEVS1230 元素查找

    #include<cstdio> #include<vector> using namespace std; typedef vector<int>::iterat ...

  4. Java如何实现系统监控、系统信息收集(转

    Java如何实现系统监控.系统信息收集.sigar开源API的学习 系统监控(1) Jar资源下载:http://download.csdn.net/detail/yixiaoping/4903853 ...

  5. python基础-协程函数、递归、模块、包等内容

    1. 协程函数 1.1 yield基本用法 yield作用 1.把函数的执行结果封装好,即封装__iter__和__next__,即得到一个迭代器 2.与return功能类似,都可以返回值,但不同的是 ...

  6. Arena | 用Excel设计的RPG游戏

    文章目录 写在前面 支持的软件 下载地址 游戏界面截图 写在前面 你在用Excel做报表的时候,世界的某个角落,有位大神早就用它做出了一款RPG游戏--Arena.xlsm 加拿大大学生Cary Wa ...

  7. js之对象(经典)

    一.对象的定义: 对象是JavaScript的一个基本数据类型,是一种复合值,它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值.即属性的无序集合. 二.对象的创建(多种方法) 1.对象 ...

  8. 【iOS微博客户端开发】1、微博整体项目的构建

    回顾自己做过的项目,总结里面的知识点,分享自己参照WXHL的视频开发的一个模拟微博客户端的过程,为了还在IOS上找不到项目参考的朋友,这里会由一系列手把手的教程,如有不足,还希望可以抖抖小手,献上您宝 ...

  9. sqlserver 删除临时表

    sqlserver 删除临时表 if object_id('tempdb..#tempTable') is not null Begin drop table #tempTable End

  10. 定期访问WebLogic Server返回状态的脚本

    在运维过程中,经常要获悉WebLogic Server的状态以便于主动的维护,本文通过weblogic WLST脚本初步设计了一下 脚本大概为2个,一是WLST的py脚本,getStates.py c ...