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. php字符串操作: 去掉UTF-16的空格

    $s = json_encode($s); $s = str_replace('\u00a0','',$s); $s = str_replace('\u3000','',$s); $s = str_r ...

  2. wecenter 问答社区 dockerfile,不用纠结于物理机的运行环境

    FROM webdevops/php-nginx:centos-7-php56 ADD . /app RUN ["chmod", "777", "/a ...

  3. 使用django开发一个博客

    环境: MAC 10.10.5  Yosemite Python 3.73 Django 代码托管 github

  4. linux 基础-变量,shell基本语法

    变量 定义变量 your_name="runoob.com" #变量名和等号之间不能有空格 使用变量 your_name="qinjx" echo $your_ ...

  5. shell编程2 ---条件判断语句

    shell编程2 一.条件判断语句 1.按照文件类型进行判断 eg:test -e /etc/passwd  或者  [ -e /etc/passwd ]  &&echo yes || ...

  6. Swift URL encode

    前言 在WEB前端开发,服务器后台开发,或者是客户端开发中,对URL进行编码是一件很常见的事情,但是由于各个年代的RFC文档中的内容一直在变化,一些年代久远的代码就对URL编码和解码的规则和现在的有一 ...

  7. shell 批量创建_备份 mysql 数据库 表

    #!/bin/bash user=root password= socket=/var/lib/mysql/mysql.sock mycmd="mysql -u$user -p$passwo ...

  8. QT下的QProcess调用外部程序

    头文件widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; ...

  9. poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13955   Accepted: 6851 Description ...

  10. Oracle数据库设计规范建议

    Oracle数据库设计规范建议 1 目的 本规范的主要目的是希望规范数据库设计,尽量提前避免由于数据库设计不当而产生的麻烦:同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好的保证 ...