我爱熊猫

最新评论

Spring Ioc 之三 ---guice的ioc实现

guice也提供ioc实现,据说比sping效率要高。下面来看代码实现。

首先service不需要变化。和前面spring中的一样,一个Helloservcie接口和其实现类HelloServiceImpl。

不同的是Action的实现。
GuiceAction:
public class GuiceHelloAction implements IHelloAction{
/*
* 在属性上设置注入点
*/
@Inject
private HelloService helloservice;

public void sayHello(){
this.helloservice.sayHello();
}
}

然后就需要设置guice了。guice的设置是建立自己的类,继承自com.google.inject.Module

/**
*
* @author yoo
* Hello的绑定模块
*/
public class HelloModule implements Module{

@Override
public void configure(Binder binder) {
/*
* 绑定HelloServiceImpl到HelloService
*/
binder.bind(IHelloService.class)
.to(HelloServiceImpl.class)
.in(Scopes.SINGLETON);
}

}

需要注意的是binder.bind()方法,就是绑定接口与实现类,并可以制定范围(单例等)。

最后就是启动guice,测试代码。

public class GuiceMain {

/**
* @param args
*/
public static void main(String[] args) {
/*
* 设置guice的注入器
*/
Injector injector = Guice.createInjector(new HelloModule());
/*
* 从guice的注入器中获取Action
*/
GuiceHelloAction hello = injector.getInstance(GuiceHelloAction.class);
hello.sayHello();

}

}

程序输出:

Hello!

回头我们在看看guice的注入,还支持方法注入和构造器注入。

构造器注入示例:

/*
* 在构造器上设置注入点
*/

@Inject
public HelloAction(HelloService helloservice){
this.helloservice = helloservice ;
}

setter注入示例:

/*
* 在方法上设置注入点
*/
@Inject
public void setHelloservice(HelloService helloservice) {
this.helloservice = helloservice;
}

与某些其他的框架相反,Guice 并没有给 "setter" 方法任何特殊待遇。
不管方法有几个参数,只要该方法含有 @Inject 标注,Guice 就会实施注入,甚至对基类中实现的方法也不例外。

其它方法注入:

@Inject
public void injectHelloservice(IHelloService helloservice) {
this.helloservice = helloservice;
}

posted on 2008-06-07 12:52 flyoo 阅读(164) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问