Atitit.guice3 ioc 最佳实践 o9o

Atitit.guice3 ioc  最佳实践 o9o

1. Guice的优点and跟个spring的比较
1

2. 两个部分:::绑定and注入@Inject 1

3. 绑定所有的方法总结 2

3.1. 绑定自身。代替new..binder.bind(BeanService1.class);绑定自身 2

3.2. 1.1.1 链式绑定 2

3.3. 使用多个同样的接口,不一样的实现,使用命名绑定Annotations命名绑定 2

3.4. 3)绑定注释和实例基本类型String、int这样的基本类型
3

3.5. 实例绑定 3

3.6. 默认绑定 4

3.7. 单例绑定 4

4. 别的anno 说明 4

4.1. @ImplementedBy ,吧推荐,直接父类/接口指定实现类 4

4.2. @ProvidedBy  复杂对象的生成... 4

5. 跟spring的集成 5

6. Guice的缺点 5

7. 参考 5

1. Guice的优点and跟个spring的比较

快速100倍...

不需要配置文件...简单... Spr使用注解也要配置文件配置sacn package...麻烦的..

有编译器检查和重构支持 ,因为code实现

2. 两个部分:::绑定and注入@Inject

绑定Module

Guice的核心就是com.google.inject.Module,它类似于Spring的bean工厂

3.2 属性注入

1 属性绑定的目的是告诉Guice,当创建该类型的对象时,哪些属性也需要进行依赖注入。用一个例子来看:

2 其它方面,比如说Struts2的Action或Service层之间的注入等,直接用@Inject就得了,不要那么多set,get,

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected]

转载请注明来源: http://blog.csdn.net/attilax

3. 绑定所有的方法总结

3.1. 绑定自身。代替new..binder.bind(BeanService1.class);绑定自身

像BeanService1是个实现类而没有实现什么接口,它当然也可能被其他类注入,可以使用 默认绑定自身,尽管这样做没什么意义,对于注入的类参数,Guice识别出来后会直接创建。

或者使用.binder.bind(BeanService1.class);

3.2. 1.1.1 链式绑定

链式绑定是最简单,最直接,也是使用最多的绑定方式。

3.3. 使用多个同样的接口,不一样的实现,使用命名绑定Annotations命名绑定

链式绑定就不好区分该用哪种实现了。可以把Annotations绑定方式看作是链式绑定的一种扩展,专门用来解决这种同一个接 口有多种实现的问题。Annotations绑定又可以分为两种,一种是需要自己写Annotations,另外一种则简化了一些。

使用@Named的方式和上面自己写Annotation的方式很类似,只不过做了相应的简化,不再需要自己去写Annotation了。[java]view plaincopy

3 public class RealBillingService implements BillingService {

4

5   @Inject

6   public RealBillingService(@Named("Checkout") CreditCardProcessor processor,

7 bind(CreditCardProcessor.class)

8     .annotatedWith(Names.named("Checkout"))

9     .to(CheckoutCreditCardProcessor.class);

3.4.  3)绑定注释和实例基本类型String、int这样的基本类型

。如果被注入的是如String、int这样的基本类型,需要做两件事情:一是对被注入的参数加上名称注释@Named,如下所示:

@Inject

public void setName(@Named("beanService1Name") String name) {

this.name = name;

}

@Inject @Named("thql")

public String testHql;

bd.bindConstant().annotatedWith(Names.named("thql")).to(" from TUserUsers ");

bind(String.class)

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

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

3.5. 实例绑定

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

?


1

2

3

4

5

6


bind(String.class)

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

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

bind(Integer.class)

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

.toInstance(10);

3.6. 默认绑定

Xx=new xx()

3.7. 单例绑定

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

binder.bind(HelloWorld.class).to(HelloWorldImplAgain.class).in(Scopes.SINGLETON);

事实上Guice提供两种Scope,com.google.inject.Scopes.SINGLETON和com.google.inject.Scopes.NO_SCOPE,所谓没有scope即是每次生成一个新的实例。

或者...

@Singleton

2     public class HelloWorldImpl implements HelloWorld {

3.8. 指定构造函数绑定

在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. 别的anno 说明

4.1. @ImplementedBy ,在父类型中进行绑定

4.2.  吧推荐,直接父类/接口指定实现类

@ImplementedBy(Class)的注释方式。可以直接从你的接口指向一个缺省的实现,而省略掉对com.google.inject.Module的实现。其实这样就违背了多态的原则,一般使用较少,最后还是把控制权交给Module来处理。

这个通常十做为默认实现类来实现兰,还是k有用的....走十好像只能应用到个接口上...

4.3. @ProvidedBy  复杂对象的生成...

如果方法中创建对象的过程很复杂,我们就会考虑,是不是可以把它独立出来,形成一个专门作用的类

参考 DI框架 Google-Guice入门介绍 - OPEN 开发经验库.htm

4.3.1.1. 在@Provides方法中进行绑定

5. 跟spring的集成

10 final BeanFactory beanFactory = new ClassPathXmlApplicationContext(

11                 new String[] { "applicationContext.xml", "daoContext.xml" });

12         binder.bind(BeanFactory.class).toInstance(beanFactory);

定义了Guice与Spring整合后,将spring工厂也由Guice托管

13 binder.bind(HelloWorld.class).toProvider(

14                 fromSpring(HelloWorld.class, "helloWorld"));

6. Guice的缺点

Guice当然也有缺点——太过于简单。不少JavaEE开发人员感觉似乎没有什么实际价值,更像是一种玩具。但我看好Guice的思想——简单而且类型安全。

7. 参考

Google-Guice入门介绍 - forlong401的专栏 - 博客频道 - CSDN.NET.htm

Guice真的无法享受企业级组件吗-梧桐雨—168-ITPUB博客.htm

google guice 绑定常量的另类用法----读取并注入配置信息 - Sky‘s blog - BlogJava.htm

DI框架 Google-Guice入门介绍 - OPEN 开发经验库.htm

时间: 2024-10-11 06:03:37

Atitit.guice3 ioc 最佳实践 o9o的相关文章

atitit.提升兼容性最佳实践 o9o

atitit.提升兼容性最佳实践 o9o.doc 1. Atitit.兼容性的"一加三"策略 1 2. 扩展表模式 1 3. 同时运行模式 1 3.1. 完美的后向兼容性 2 3.2. 虚拟机模式 2 1. Atitit.兼容性的"一加三"策略 "通过移除陈旧代码降低编译器维护成本,Java9 javac 将不再支持Java 1.5以及更早的代码.JDK9的"一加三"策略意味着该版本的javac会支持1.9/9, 1.8/8, 1.7/

atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php

atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php \ 1. 泛型历史 1 由来 1 2. 泛型的机制编辑 1 机制 1 编译机制 2 3. 泛型方法定义1::前定义 2 4. 泛型方法定义2::后定义,方法也需要加<T>标签... 2 5. 调用泛型方法::: cls.<String>meth(); 2 6.  //反回值为范型 2 7. 参考 3 1. 泛型历史 泛型编程(Generic Programming)最初提出时的动机很简单直接:发明

atitit.提升兼容性最佳实践&#160;p825.doc

atitit.提升兼容性最佳实践 p825.doc 1. Atitit.兼容性的“一加三”策略1 2. 扩展表模式2 3. 同时运行模式2 3.1. 完美的后向兼容性3 3.2. 虚拟机模式3 3.3. 版本兼容性模式3 4. 向前兼容(为升级预留足够余地)4 5. “向前兼容”理念4 6. 专门处理的软件列表4 1. Atitit.兼容性的“一加三”策略 “通过移除陈旧代码降低编译器维护成本,Java9 javac 将不再支持Java 1.5以及更早的代码.JDK9的“一加三”策略意味着该版本

atitit.guice3&#160;绑定方式打总结生成非单例对象toInstance&#160;toProvider区别&#160;v2&#160;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. 在

Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php

Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php 1. Jdk zip 跟apache ant zip 1 2. Apache Ant包进行ZIP文件压缩,upzip 大概流程.. 1 3. 读文件名称ok,但是cant读取到input说NPE.. 2 4. Ant1.8.2.jar 2 5. #---详细code 2 6. 参考 4 1.  Jdk zip 跟apache ant zip 下面实现的功能是zip文件中的图像文件解压到当前目录下,用jdk自带的处

Atitit.列表页面and条件查询的实现最佳实践(2)------翻页 分页 控件的实现java .net php

Atitit.列表页面and条件查询的实现最佳实践(2)------翻页 分页 控件的实现java .net php 1. 关于翻页有关的几大控件::搜索框控件,显示表格控件,翻页器,数据源控件.. 1 2. 翻页的显示格式:: 1 2.1. 通常ui--"首页"."上页"."下页"."末页",还要有Goto到指定页 1 2.2. 百度式::...<上一页567891011121314下一页 2 2.3. 综合的页面 首

Atitit.&#160;软件设计&#160;模式&#160;变量&#160;方法&#160;命名最佳实践&#160;vp820&#160;attilax总结命名表大全

Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全 1. #====提升抽象层次 1 2. #----使用通用单词 1 3. #===使用术语.. 1 4. #===使用缩写 2 5. #====自己最孰的语言(diaglog??) 2 6.  2 7. #====normal naming + anno 2 8. #----jsp页面的名称,最好不个mod_list.jsp 2 9. 名词优先与动词 2 10. 变量的常用前缀 2 11. 常用命

Atitit. 拉开拉链zip文件 最佳实践实施 java c# .net php

Atitit. 拉开拉链zip文件 的实现最佳实践 java c# .net php 1. Jdk zip 跟apache ant zip 1 2. Apache Ant包进行ZIP文件压缩,upzip 大概流程.. 1 3. 读文件名ok,可是cant读取到input说NPE.. 2 4. Ant1.8.2.jar 2 5. #---具体code 2 6. 參考 4 1.  Jdk zip 跟apache ant zip 以下实现的功能是zip文件里的图像文件解压到当前文件夹下.用jdk自带的

atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml

atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml 1. yaml是个好的选择.. 1 2. 数据的层次结构--结构:hash,list,和block literal. 1 3. yaml跟json的实现区别 1 4. xml的优点及json的问题 2 4.1. ide友好 2 4.2. JSON也适合与任何数据,复杂struts难以阅读 2 4.3. json难以手工维护 3 5. 基于YAML的开源项目解析YAML文件最常用的Java库是JvY