Guice总结

Jar包:guice-4.1.0.jar

辅包:

  1. guava-15.0.jar
  2. aopalliance-.jar
  3. javaee-api-6.0-RC2.jar

Guice的IoC

两种模式,一种是基于Module的,Module的实现类将会在config()方法中进行配置,指定某一个基类/接口都应对应哪一个具体实现;这样,在通过@Inject来注解属性/构造函数的时候,就可以自动根据配置进行实例化。

但是Guice实例和Spring一个很大区别在于获取实例的方式一定是通过如下方式获取(因为Guice没有扫描和自动发现功能):

Public void config(Binder binder){
Binder.bind(BaseClass.class).to(ImplClass.class);
}
… … injector = Guice.createInjector(new ObjectPool());
BaseClass instace = injector.getInstance(BaseClass.class);

在这个过程中才会应用config中的配置来对注解内容进行操作;instance的类型是ImplClass。OjectPool对象实现了Module,并重写了config()。

当然,如果没有这种根据抽象类/接口来选择实现对象的场景,可以不使用Module,比如作为一个类,里面的属相可能就是比较直白的类,直接new就可以了,这个时候,你可以采用@Inject进行注解构造函数的方式,来进行自动实例化构造参数。

Private C1 c1;
Private C2 c2; @Inject
Public MyClass(C1 c1, C2 c2){ } …. Injector = Guice.createInjector();
MyClass mc = Injector.getInstance(MyClass.class);

类似的,还可以直接进行字段注解,在getInstance()的过程中,将会自动对于字段进行实例化,这个过程有点像一个熔炉的感觉,扔进去一个类,出来的是一个经过处理的实例了。

Guice的IoC有两大作用,一个是通过config来定义抽象类/接口的具体实现类,第二个是在构建实例的时候,自动来实例化参数以及字段,本质都是实例化,一个是选择性,一个是内部关联对象实例化。即一个是实例化那个,一个怎么实例化。

另外,在怎么实例化的时候,在对于抽象列/接口类型字段/参数的时候也会有一个实例化那个的处理。

 

创建AOP

第一步,

创建一个AOP的拦截对象,继承MethodInterceptor(需要引入aopalliance-.jar),重写invoke方法:

    @Override
public Object invoke(MethodInvocation arg0) throws Throwable {
doBefore(arg0);
Object ret = arg0.proceed();
doAfter(arg0);
return ret;
}

实现doBefore以及doAfter来进行前置操作和后置操作;

第二步,

就是在Module的实现类中通过配置config函数来制定绑定AOP的规则,下面定义的规则就是注解“Data2Aop”的方法将会被使用Data2Aop来进行AOP(Data2Aop继承了MethodInterceptor并重写了invoke):

    @Override
public void configure(Binder binder) {
  binder.bindInterceptor(Matchers.any(), Matchers.annotatedWith(Names.named("Data2Aop")), new Data2Aop());
}

第三步,

在Data2Handler类中的handler方法体(真正要切的函数)上面通过@Named来进行注解。

@Named("Data2Aop")
protected void handleInternal(TransportSession tSession, CommandExchangeBuffer ceb) throws Exception {
  … …
}

第四步,

在需要进行Data2Handler实例化的时候,通过Guice的Injector来进行获得(实践规则),即可实现AOP了。

实例化之后,使用Guice来注入成员

可以实例化之后,在通过injector.injectMembers(instance)来注入@Inject成员
TaskContainer container = new TaskContainer();
this.taskManager = new TaskManager(container);
Platform.getInjector().injectMembers(taskManager);

Guice总结的更多相关文章

  1. java轻量级IOC框架Guice

    Google-Guice入门介绍(较为清晰的说明了流程):http://blog.csdn.net/derekjiang/article/details/7231490 使用Guice,需要添加第三方 ...

  2. guice的基本使用(一)

    guice是google一个轻量级的DI注入框架,现在比较强大了,也与目前流行的struts2.jpa等都有集成了. 先看一个例子: package com.ming.user.test; publi ...

  3. jdbc框架 commons-dbutils+google guice+servlet 实现一个例子

    最近闲着无聊,于是看了一下jdbc框架 commons-dbutils与注入google guice. 我就简单的封装了一下代码,效率还是可以的.... jdbc+google guice+servl ...

  4. guice框架的入门使用

    guice框架是一种类似于spring的ioc容器的一种框架,使用简单,比較轻量级的一个框架,速度极快,灵活性极强,如今就先来写几个guice的程序. 在这里我就不给出guice的jar包,这些都能够 ...

  5. Guice学习(一)

    Guice学习(一) Guice是Google开发的一个轻量级依赖注入框架(IOC).Guice非常小而且快,功能类似与Spring,但效率上网上文档显示是它的100倍,而且还提供对Servlet,A ...

  6. java DI 框架spring(web)、Guice(web)、Dagger&Dagger2(android)

    java DI 框架spring(web).Guice(web).Dagger&Dagger2(android) (待续...)

  7. Guice 学习(六)使用Provider注入服务( Provider Inject Service)

    1.定义接口 package com.guice.providerInject; import com.google.inject.ProvidedBy; public interface Servi ...

  8. Google Guice结合模式

    于Guice于,喷油器装配工作是一个对象图,当请求类型实例,喷油器根据推断对象如何映射到创建的实例.解决依赖.要确定如何解决的依赖就需要配置喷油器结合的方式. 要创建绑定(Binding)对象,能够继 ...

  9. 轻量级IOC框架Guice

    java轻量级IOC框架Guice Guice是由Google大牛Bob lee开发的一款绝对轻量级的java IoC容器.其优势在于: 速度快,号称比spring快100倍. 无外部配置(如需要使用 ...

  10. Android依赖注入:Google Guice on Android的使用及相关资源

    本文转自:http://blog.csdn.net/sangming/article/details/8878104 RoboGuice 使用谷歌自己的Guice库,给Android带来了简单和易用的 ...

随机推荐

  1. 九度OJ 1208:10进制 VS 2进制 (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2040 解决:612 题目描述: 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数. ...

  2. Convex combination

    en.wikipedia.org/wiki/Convex_combination 凸组合 In convex geometry, a convex combination is a linear co ...

  3. android 中使用svg

    http://www.see-source.com/blog/300000038/1189.html http://www.jianshu.com/p/30dfa5920658#

  4. hdu 3718 Different Division

    Different Division Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  5. 利用java servlet实现简单的web请求过滤和跳转

    今日有两个微信web项目合并了,但是还有些链接指向废弃的项目,另外不想在服务器上运行两份相同web项目(1.影响性能.2.维护升级容易出错),因此决定写一个简单链接跳转的项目,spring的filte ...

  6. LeetCode:验证回文串【125】

    LeetCode:验证回文串[125] 题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: ...

  7. SpringBoot学习笔记(7):Druid使用心得

    SpringBoot学习笔记(7):Druid使用心得 快速开始 添加依赖 <dependency> <groupId>com.alibaba</groupId> ...

  8. parent

    <?php class MyObject { function myMethod() { //标准功能 echo "Standard Functionality\n"; } ...

  9. iOS 展示 gif

    gif 图 是多张依次有连续动作的图 顺时间展示的一种动态效果图 .   有的是均匀时间更换下一张  有的 则不是均匀时间变化 1. 那么 对于均匀 时间变化的gif图 比较适合 使用 iOS 系统自 ...

  10. mongodb同步

    mongodb同步 py-mongo-sync MongodbSync mongodb 的一个同步工具,具备将一个数据源上的数据,同步到其它 mongodb 上,支持: mongos -> (m ...