atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29
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://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. 参考
Atitit.guice3 ioc 最佳实践 o9o
Google-Guice入门介绍 - Derekjiang的笔记簿 - 博客频道 - CSDN.NET.htm
atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29相关推荐
- 单例对象会被jvm的gc时回收吗_设计模式专题02-单例五种创建方式
单例五种创建方式(下一篇:工厂模式) 什么是单例 保证一个类只有一个实例,并且提供一个访问该全局访问点 单例应用场景 1. Windows的Task Manager(任务管理器)就是很典型的单例模式( ...
- jq父级绑定事件的意义_js、jq事件绑定方式总结——以click事件为例
一.JavaScript点击事件绑定方法 1.1 HTML onclick事件属性 1 click me 1 functionclickMe(this) {2 alert("click me ...
- 枚举方式的线程安全的单例
1,枚举 public enum Color {blue, red, yellow } 枚举是会被另外处理的. 枚举只能拥有私有的构造器 枚举类实际上是一个继承Enum的一个final类 枚举类不允许 ...
- python3的配置文件类单例实现_单例模式的几种实现方式及对比
来源:博客园 作者:为何不是梦 链接:https://www.cnblogs.com/ibigboy/p/11423613.html 所谓单例就是在系统中只有一个该类的实例. 单例模式的核心分以下三个 ...
- java中单例实现常用的方式_Java单例的常见形式
Java单例的常见形式 本文目的:总结Java中的单例模式 本文定位:学习笔记 学习过程记录,加深理解,便于回顾.也希望能给学习的同学一些灵感 一.非延迟加载单例类 public class Sing ...
- 关于“如何破坏单例“我说了好几种方式,面试官却说:我其实随便问问,没想到你真会
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.是一种创建型设计模式.他的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式一般体现在类声明中 ...
- 关于如何破坏单例我说了好几种方式,面试官却说:我其实随便问问,没想到你真会...
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.是一种创建型设计模式.他的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式一般体现在类声明中 ...
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)
单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...
- java 单例 实现_java 实现单例的各种方式
概述 上一篇日志中,我们介绍了单例模式的概念和基础的应用 本节中,我们就来介绍一下 java 语言中如何编写单例模式类 只适合单线程环境的单例模式 public class Singleton { p ...
最新文章
- animate默认时长所带来的问题及解决
- 人工智能时代,最先占领高维度空间
- 给介绍下对象呗?这回答绝对专业!
- Win32使用Windows公共控件库创建工具条
- 利用Reachability实现网络状态监听
- boost::histogram::accumulators::mean用法的测试程序
- EXCEL数据汇总-数据透视图
- 论文浅尝 | 如何利用外部知识提高预训练模型在阅读理解任务中的性能
- Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图)
- 【Python】表白代码
- Hashmap扩容时出现循环链表(jdk1.8把头插法换成了尾插法的原因)
- 直播P2P技术2-低延迟模型
- OpenGL笔记5 shader 调试信息获取 Debug
- 城市间紧急救援 (25 分)(Dijkstra)
- CUDA编程-02: 初识CUDA编程
- iOS:练习题中如何用技术去实现一个连线题
- Mybatis之插件
- excel 多行 取消隐藏_如何在Excel 2013中隐藏和取消隐藏行和列
- [转载]hostapd配置解析
- NetworkInterface网速监测