atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29
atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29
重大的描述
1. 三 绑定方式的介绍
1. 11 链式绑定
3. 13 实例绑定
5. 15 无目标绑定
6. 16 指定构造函数绑定
2. 在父类型中进行绑定
2. 2 ProvidedBy
2. To接口,链式绑定,用的最多的
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/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. 参考
Google-Guice入门介绍 - Derekjiang的笔记簿 - 博客频道 - CSDN.NET.htm
相关文章
- 定制并发类(五)在一个Executor对象中使用我们的ThreadFactory
- Ajax进阶 FormData对象
- 利用 FastCoding 将对象进行本地持久化
- TypeError: 'bases' is null or not an object。IE8 bug 腐朽的对象
- C++中的对象初始化
- Atitit 数据查询法 目录 1. 数据查询语言QL (推荐)1 1.1. Sql1 1.2. 对象查询语言(OQL)1 1.3. Atitit QL查询语言总结Jpql Ongl
- Atitit springboot 上传与下载总结 上传 使用file对象的transferTo保存方法最简单 @RequestMapping(value = "/up", method = R
- Atitit 封装的艺术 目录 1.1. 规范是不暴露特有的api1 1.2. 方便理解,提升可读性1 1.3. Atitit 提升可读性 数据结构特殊化专用api 比较通用的对象
- atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29
- Atitit.web 视频播放器classid clsid 大总结quicktime,vlc 1. Classid的用处。用来指定播放器1 2. 标签用于包含对象,比如图像、音
- Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o
- js对象的创建 js对象和java对象的不同
- 100天精通Python(数据分析篇)——第55天:Pandas之DataFrame对象基础大总结
- 自定义对象_JavaScript
- OpenCV使用分水岭变换来实现图像中对象计数
- List 集合去重合并 , 多种方法演示___关于两个List集合对象去重
- JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
- JavaScript学习总结(二)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
- 未将对象引用设置到对象的实例--可能出现的问题总结
- C++ 对象的内存布局
- 未将对象引用设置到对象的实例--可能出现的问题总结
- MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用
- 封装:使对象的属性尽可能私有,对象的方法尽可能的公开
- Mybatis对象关联数据库表【一对多关联AND一对一关联】
- 第32讲:Python获取字典对象的视图(items方法)
- 趁着你对象吃泡面的功夫,我修复了误删除的文件