Guice总结
Guice总结
Jar包:guice-4.1.0.jar
辅包:
- guava-15.0.jar
- aopalliance-.jar
- 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来注入成员
Guice总结的更多相关文章
- java轻量级IOC框架Guice
Google-Guice入门介绍(较为清晰的说明了流程):http://blog.csdn.net/derekjiang/article/details/7231490 使用Guice,需要添加第三方 ...
- guice的基本使用(一)
guice是google一个轻量级的DI注入框架,现在比较强大了,也与目前流行的struts2.jpa等都有集成了. 先看一个例子: package com.ming.user.test; publi ...
- jdbc框架 commons-dbutils+google guice+servlet 实现一个例子
最近闲着无聊,于是看了一下jdbc框架 commons-dbutils与注入google guice. 我就简单的封装了一下代码,效率还是可以的.... jdbc+google guice+servl ...
- guice框架的入门使用
guice框架是一种类似于spring的ioc容器的一种框架,使用简单,比較轻量级的一个框架,速度极快,灵活性极强,如今就先来写几个guice的程序. 在这里我就不给出guice的jar包,这些都能够 ...
- Guice学习(一)
Guice学习(一) Guice是Google开发的一个轻量级依赖注入框架(IOC).Guice非常小而且快,功能类似与Spring,但效率上网上文档显示是它的100倍,而且还提供对Servlet,A ...
- java DI 框架spring(web)、Guice(web)、Dagger&Dagger2(android)
java DI 框架spring(web).Guice(web).Dagger&Dagger2(android) (待续...)
- Guice 学习(六)使用Provider注入服务( Provider Inject Service)
1.定义接口 package com.guice.providerInject; import com.google.inject.ProvidedBy; public interface Servi ...
- Google Guice结合模式
于Guice于,喷油器装配工作是一个对象图,当请求类型实例,喷油器根据推断对象如何映射到创建的实例.解决依赖.要确定如何解决的依赖就需要配置喷油器结合的方式. 要创建绑定(Binding)对象,能够继 ...
- 轻量级IOC框架Guice
java轻量级IOC框架Guice Guice是由Google大牛Bob lee开发的一款绝对轻量级的java IoC容器.其优势在于: 速度快,号称比spring快100倍. 无外部配置(如需要使用 ...
- Android依赖注入:Google Guice on Android的使用及相关资源
本文转自:http://blog.csdn.net/sangming/article/details/8878104 RoboGuice 使用谷歌自己的Guice库,给Android带来了简单和易用的 ...
随机推荐
- 【BZOJ4548】小奇的糖果 set(链表)+树状数组
[BZOJ4548]小奇的糖果 Description 有 N 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的 ...
- 【BZOJ4205】卡牌配对 最大流
[BZOJ4205]卡牌配对 Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值 ...
- 信息搜集之google语法
总结的比较全,无耻的转了.D: http://blog.csdn.net/chaosa/article/details/1828301 说起Google,可谓无人不知无人不晓.作为世界第一的搜索引擎, ...
- 我的Android进阶之旅------>MIME类型大全
今天在实现一个安装apk的代码中看到一段代码为:application/vnd.android.package-archive,不知其意,所以百度了一下,了解到这是一种MIME的类型,代表apk类型. ...
- sqlite增删改查 SimpleCursorAdapter 事务
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- rails跨域请求配置
gem 'rack-cors', '~> 0.3.1'application.rb config.middleware.insert_before 0, "Rack::Cors&quo ...
- static_class
<?php class MyObject { public static $myStaticVar = 0; function myMethod() { self::$myStaticVar + ...
- img标签中alt属性与title属性
alt属性 1.alt属性是考虑到不支持图像显示或者图像显示被关闭的浏览器的用户,以及视觉障碍的用户和使用屏幕阅读器的用户.当图片不显示的时候,图片的替换文字.2.alt属性值得长度必须少于100个英 ...
- 如何在 Eclipse 中使用命令行
虽然我们已经有了像 Eclipse 这样高级的 IDE,但是我们有时候也是需要在开发的时候使用 Windows 的命令行,来运行一些独立的程序.在两个程序中切换来切换去是很麻烦的.所以 Eclipse ...
- <软件架构与设计模式>侯捷老师关于Adapter类在STL中的深入解析和模式探讨
题外话:侯捷老师难得一年就来上九堂课就要会宝岛,特此留念签名赠语及合照以自勉. 学海无涯,为勤是岸 <正文开始> 昨天晚上连上了3个小时的大课探究单单讲了Adapter一个类,幸运的是本 ...