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. linux下jdk多版本管理

    linux下jdk多版本管理 项目开发中,不管是哪种语言都避免不了多个版本环境管理问题(本文虽然以jdk为例来写的,但不仅限于jdk),如何能做到快速的环境升级与切换确实是一件深思的事! 安装jdk ...

  2. 九度OJ 1200:最大的两个数 (最值)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2904 解决:761 题目描述: 输入一个四行五列的矩阵,找出每列最大的两个数. 输入: 输入第一行包括一个整数n(1<=n<= ...

  3. First non repeating word in a file? File size can be 100GB.

    1 solution 1 1.1 数据结构 一个Hashmap和一个双向链表.如果想要快速获取first,并且只遍历一次,那么就要想到双向链表和HashMap的组合. 链表可以保证第一个在head处, ...

  4. information entropy as a measure of the uncertainty in a message while essentially inventing the field of information theory

    https://en.wikipedia.org/wiki/Claude_Shannon In 1948, the promised memorandum appeared as "A Ma ...

  5. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之实现游戏逻辑(五)

    在上一篇<我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)>中提到的两个类: GameConf:负责管理游戏的 ...

  6. - symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, ma

    $ composer install Loading composer repositories with package information Installing dependencies (i ...

  7. ob 函数讲解

    ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存.如果是header信息,直接放在程序缓存.当页面履行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给涉猎器.下面我说说ob的基 ...

  8. 去掉标题栏/ActionBar后点击menu键时应用崩溃

    MainActivity 继承了 ActionBarActivity后,想要去掉标题栏(ActionBar),在程序中加上requestWindowFeature(Window.FEATURE_NO_ ...

  9. mysql 5.5 安装配置方法图文教程(转发)

    MySQL下载地址:http://dev.mysql.com/downloads/installer/ 1.首先进入的是安装引导界面 2.然后进入的是类型选择界面,这里有3个类型:Typical(典型 ...

  10. 图片oom问题

    1.什么是OOM? 程序申请内存过大,虚拟机无法满足我们,然后自杀了.这个现象通常出现在大图片的APP开发,或者需要用到很多图片的时候.通俗来讲就是我们的APP需要申请一块内存来存放图片的时候,系统认 ...