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:1466519819@qq.com

转载请注明来源: 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

Atitit.guice3 ioc 最佳实践 o9o相关推荐

  1. atitit.人脸识别的应用场景and使用最佳实践 java .net php

    atitit.人脸识别的应用场景and使用最佳实践 java .net php 1. 人脸识别的应用场景 1 2. 框架选型 JNI2OpenCV.dll and JavaCV 1 3. Url ap ...

  2. atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换

    atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ...

  3. 事务管理最佳实践全面解析

    事务管理最佳实践全面解析 前言 写作这篇文章的起因,是前一段时间,我使用Jbpm工作流引擎开发工作流管理系统的过程中,使用编程方式管理事务时遇到的问题. 由于之前很长一段时间,我一直都在使用Sprin ...

  4. 软件架构设计最佳实践

    软件架构设计最佳实践 课程介绍: 1.深入阐述软件架构设计的思想.方向及趋势:2.剖析软件架构的全景视图:3.结合实际案例分析架构设计过程及需求对架构的影响:4.如何实用设计模式来实现好的架构:5.实 ...

  5. 决胜大数据时代:HadoopYarnSpark企业级最佳实践(3天)

    Hadoop是云计算的事实标准软件框架,是云计算理念.机制和商业化的具体实现,是整个云计算技术学习中公认的核心和最具有价值内容. Yarn是目前公认的最佳的分布式集群资源管理框架: Mahout是目前 ...

  6. 威胁情报大会直击 | 企业IT部王森:腾讯企业终端安全管理最佳实践

    8月29日,2018网络安全分析与情报大会在北京新云南皇冠假日酒店正式开幕,本次大会由国内威胁情报领军企业微步在线主办,十数位来自政府.央企.金融.互联网等一线公司的安全专家将对威胁情报的落地应用进行 ...

  7. ASP.NET Core Web API 最佳实践指南

    原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 介绍 当我们编写一个项目的时候,我们的主要目标是使它能如期运行,并尽可能地满足所有用户需求. 但是,你难 ...

  8. 短信验证码“最佳实践”

    1.背景 年初,从外地转移阵地到西安,转眼已两个多月.很久不写业务代码了,到了新公司,条件恶劣到前所未有,从需求,设计,架构,实现,实施,测试,bug修复,项目计划制定,项目管理,全他妈我一个人,关键 ...

  9. Java实现短信验证码最佳实践

    1.背景 2.实现 3.运行效果: 4.源码 5.总结 1.背景 年初,从外地转移阵地到西安,转眼已两个多月.很久不写业务代码了,到了新公司,条件恶劣到前所未有,从需求,设计,架构,实现,实施,测试, ...

  10. 搭建Spring4+Spring MVC web工程的最佳实践

     Spring是个非常非常非常优秀的java框架,主要是用它的IOC容器帮我们依赖注入和管理一些程序中的Bean组件,实现低耦合关联,最终提高系统可扩展性和可维护性,用它来辅助我们构建web工程将 ...

最新文章

  1. OpenCL产业开发链
  2. shell安装samba服务
  3. Linux就业技术指导(七):游戏类运维重点流程解析
  4. C# 向listbox添加大量数据项的实践心得
  5. 【图论】【高精】产生数(ssl 1021/ luogu 1037)
  6. 前端笔试题总结---持续更新
  7. 信息学奥赛一本通(1164:digit函数)
  8. gp3688 uhf2扩频_摩托罗拉GP3688对讲机(VHF、UHF)对讲机维修
  9. Python:学习笔记之PyQt5
  10. 仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)...
  11. 经典相声——企业信息化新“五官争功”
  12. java dateutils 今天_Java日期时间DateUtils工具包
  13. 利用qq官方提供的js_sdk实现qq互联登录
  14. 关系数据库(范式判断、函数依赖、无损分解、正则覆盖)
  15. 一文讲解AGV机器人的12种导航导引方式,收藏备用
  16. 电脑root,360超级ROOT
  17. 庄表伟:License之外,社区的规则与潜规则 | DEV. Together 2021 中国开发者生态峰会...
  18. 联泰科技与赢创联合研发实验室正式成立;丰田携手Fleetsu提供互联车队管理解决方案 | 全球TMT...
  19. linux启动db2的命令窗口_linux下如何启动db2数据库命令窗口
  20. zcmu-1599 卡斯丁狗的炉石传说

热门文章

  1. Spark RDD概念学习系列之什么是Pair RDD
  2. MySQL数据库使某个不是主键的字段唯一
  3. 行如风 Angular初识
  4. linux命令:mkfs、mke2fs、blkid、e2label、tune2fs、dumpe2fs、fsck、e2fsck
  5. laravel访问路由在nginx服务器上无法处理
  6. Oracle数据库REDO损坏ora-00333修复手札
  7. Centos6.5+Python2.7 +ffmpeg+opencv2自动安装脚本
  8. MSR系列路由器DAR功能的配置
  9. .net 中Dictionary的遍历
  10. Vue生命周期学习总结