Google Guice 之绑定1
绑定和依赖注入区别
绑定,使用时 需要通过 injector 显示获取
依赖注入,只需要显示获取主类,他的依赖是通过@Injector 和 绑定关系 隐式注入的
http://blog.csdn.net/jing_le/article/category/1403309
http://blog.csdn.net/java_le/article/details/24850355
- Injector in = Guice.createInjector(new MyModule()) ;
- Hello hello = in.getInstance(Hello.class)
Google Guice 绑定2
http://blog.csdn.net/java_le/article/details/24850777
上一章简单介绍了,如何使用Guice框架来完成接口(父类)和具体的实现类(子类)之间的关联。通过MyModule中:
binder.bind(Hello.class).to(HelloImpl.class).in(Singleton.class) ;
来实现关联关系,这节介绍通过注解来实现关联关系
(1)首先还是Hello.java接口(注意类头上的注解,描述了这个接口要绑定的实现类)
- @ImplementedBy(HelloImpl.class)
- public interface Hello {
- void sayHello() ;
- }
Hello.java这个接口的具体实现类:HelloImpl.java(类头上的注解,这类是单列还是动态创建)
- @Singleton
- public class HelloImpl implements Hello{
- @Override
- public void sayHello() {
- System.out.println("HelloImpl say hello");
- }
- }
我们的MyModule实现类(具体的绑定关系被注释了)
- package guice.binder;
- import com.google.inject.Binder;
- import com.google.inject.Module;
- public class MyModule implements Module{
- @Override
- public void configure(Binder binder) {
- //将借口hello.java 绑定到实现类HelloImpl.java上
- //Singleton:表示是scope是单列的,Guice中类的scope只有两类,单例,或者每次都是new的一个新的对象
- //<span style="white-space:pre"> </span>binder.bind(Hello.class).to(HelloImpl.class).in(Singleton.class) ;
- }
- }
- Injector in = Guice.createInjector(new MyModule()) ;
- Hello hello = in.getInstance(Hello.class) ;//hello -->HelloImpl实例
输出的结果依然还是HelloImpl say hello,
Google Guice 注入(@Inject注解)
上一节介绍通过注解来实现绑定关系,这一节介绍如何通过@Inject来完成依赖注入的功能:
(1)属性注入
(2)构造方法注入
(3)setter方法注入
一.属性注入
(1)创建一个接口Hello.java和一个实现类HelloImpl
创建一个HelloCaller(包含一个Hello属性)
- package guice.di;
- import com.google.inject.Inject;
- //HelloCaller将会去调用Hello这个接口提供的服务
- public class HelloCaller {
- //通过@Inject,来完成属性的注入
- @Inject
- private Hello hello ;
- //调用Hello的sayHello方法(实际上就是去调用HelloImpl的sayHello,因为我们将Hello的实现指定是HelloImpl)
- public void sayHello(){
- hello.sayHello() ;
- }
- }
通过@Inject注解将Hello属性的实例注入进来
- Injector in = Guice.createInjector(new Module(){
- @Override
- public void configure(Binder arg0) {
- //什么也不写
- }
- }) ;
- //得到HelloCaller的实例
- HelloCaller helloCaller = in.getInstance(HelloCaller.class) ;
- //调用sayHello方法
- helloCaller.sayHello() ;
构造方法注入
(1)Hello和HelloImpl类还是上面那样不用变,唯一变化的是HelloCaller类
- package guice.di;
- import com.google.inject.Inject;
- public class HelloCaller1 {
- //包含一个Hello属性
- private Hello hello ;
- //@Inject注解写在构造方法上,通过构造方法的方式注入属性hello
- @Inject
- public HelloCaller1(Hello hello){
- this.hello = hello ;
- }
- public void sayHello(){
- hello.sayHello() ;
- }
- }
setter方式注入
(1)Hello和HelloImpl类还是上面那样不用变,唯一变化的是HelloCaller类
- //通过setter方法来注入hello属性
- @Inject
- public void setHello(Hello hello) {
- this.hello = hello;
Google Guice 之绑定1的更多相关文章
- Google Guice结合模式
于Guice于,喷油器装配工作是一个对象图,当请求类型实例,喷油器根据推断对象如何映射到创建的实例.解决依赖.要确定如何解决的依赖就需要配置喷油器结合的方式. 要创建绑定(Binding)对象,能够继 ...
- Google Guice学习
学习动力:公司项目使用 官方文档:https://github.com/google/guice/wiki/Motivation 学习阶段:入门 主要部份: 简介 Bindings方式 Scopes设 ...
- google guice
1 google guice是什么 google guice是一个轻量的DI容器. 2 guice和spring对比 spring的配置放在xm文件中,guice的配置放在Module中. guice ...
- 【曹工杂谈】Maven IOC容器的下半场:Google Guice
Maven容器的下半场:Guice 前言 在前面的文章里,Maven底层容器Plexus Container的前世今生,一代芳华终落幕,我们提到,在Plexus Container退任后,取而代之的底 ...
- jdbc框架 commons-dbutils+google guice+servlet 实现一个例子
最近闲着无聊,于是看了一下jdbc框架 commons-dbutils与注入google guice. 我就简单的封装了一下代码,效率还是可以的.... jdbc+google guice+servl ...
- Guice 依赖绑定
Guice 依赖绑定 连接绑定(Linked Bingdings) 连接绑定是 Guice 最基本的一种绑定方式.这种绑定方式我们需要在自己定义的 Module 的 configure() 中编写绑定 ...
- 依赖注入框架Google Guice 对象图
GettingStarted · google/guice Wiki https://github.com/google/guice/wiki/GettingStarted sameb edited ...
- 史上最好用的依赖注入框架Google Guice【转】
Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC).Guice非常小而且快. (其他的依赖注入框架还有Dagger,Spring) Spring ...
- google guice @inject comments
refer this document: http://blog.chinaunix.net/uid-20749563-id-718418.html @Inject注入方式,用@Inject来标识那个 ...
随机推荐
- CC TSUBSTR:Substrings on a Tree——题解
https://www.codechef.com/problems/TSUBSTR https://vjudge.net/problem/CodeChef-TSUBSTR 给一棵点权为字母的树,你只能 ...
- 20165218 2017-2018-1 《Java程序设计》第一周学习总结
20165218 2017-2018-1 <Java程序设计>第一周学习总结 教材学习内容总结 第一章.Java入门 1. Java特点 Java具有简单.面向对象.平台无关.多线程.动态 ...
- HDOJ(HDU).1241 Oil Deposits(DFS)
HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...
- Spring.NET中事务管理【转】
http://www.cnblogs.com/GoodHelper/archive/2009/11/16/springnet_transaction.html 浏览了下写的比较清楚. 在.NET FC ...
- Widows与linux关于隐形文件和非隐形文件の对比
Widows与linux关于隐形文件和非隐形文件の对比 对于windows来说 ,它本身有一些隐藏文件,为了防止一些菜鸟不小心把电脑的主要文件删除,还有就是里面存放一些你不知道的后门. 对此我们一些同 ...
- Codeforces Round #342 (Div. 2) C
C. K-special Tables time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- POJ3177:Redundant Paths(并查集+桥)
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19316 Accepted: 8003 ...
- Jenkins自动化构建系列:01敏捷开发、自动化构建与持续集成
<SVN与TortoiseSVN实战系列>已写完,今天新开一个<Jenkins自动化构建系列>,上周听了Bob Jiang老师的Agile1001公开课,一直想写个总结,这篇关 ...
- 轮廓算法的结果验证工具/How to validate the outline output
因为轮廓算法的结果通过直接观察输出很难判断结果的正确性. 但是如果把输入和输出同时绘制出来,用眼睛判别则相对简单许多. 输入建筑的文件内容格式为,粗体格式为建筑高度: 10 110 5020 60 7 ...
- sql service 事务与锁
了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...