博客统计信息

用户名:范立锋
文章数:23
评论数:16
访问量:4372
无忧币:20
博客积分:282
博客等级:2
注册日期:2009-06-13

我的技术圈(1)

更多>>
Guice中的IoC
2009-11-23 19:45:49
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://fanlifeng.blog.51cto.com/822773/232571
Guice是一个轻量级,基于Java 5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快,Guice是安全的类型,它能够对构造函数、属性、方法进行注入。
Guice提供的3种注入方式
Guice通过@Inject标注来实现依赖注入,它根据作用的对象不同分为方法注入、构造方法注入、字段注入3种注入方式。
在使用@Inject进行注入时,需要通过标注@ImplementedBy(SunyangImpl.class)来声明Sunyang接口的实现类。下面分别说明这3种注入方法。
1.使用成员变量进行注入
新建一个类,在类中添加类型为Sunyang的成员变量sunyang,通过@Inject标注声明该成员变量为被注入的变量,同时使用Guice的方法createInjector()将此变量注入,并用getInstance()方法将其取出。
createInjector方法可以有多个参数,它的参数均为接口Module类型。没有参数时,Inject标注作用的属性全部进行注入,相反将参数的内容注入。属性必须存在于createInjector方法的类中,如代码12-10所示。
代码12-10    成员变量注入
package sunyang.inject;
import sunyang.Sunyang;
import com.google.inject.Guice;
import com.google.inject.Inject;
public class Field {
  @Inject
  private Sunyang sunyang;
    
  public static void main(String[] args) {
              Guice.createInjector().getInstance(Field.class).sunyang.print();
        }
}
在代码12-10的main方法中得到被注入的接口Sunyang类型的成员变量sunyang,然后执行其print方法。得到的结果如图12-4所示。
图12-4  使用成员变量注入
2.使用构造方法进行注入
使用构造方法进行注入,需要在类中增加Sunyang类型的成员变量,然后定义一个包含Sunyang类型参数的构造方法,通过@Inject标注声明构造方法将其注入,在main方法中将其取出,并执行其属性sunyang的print方法,如代码12-11所示。
代码12-11  构造方法注入
package sunyang.inject;
import sunyang.Sunyang;
import com.google.inject.Guice;
import com.google.inject.Inject;
public class Constructor {
  private Sunyang sunyang;
  @Inject
  public Constructor(Sunyang sunyang) {
    this.sunyang = sunyang;
  }
  public static void main(String[] args) {
    Guice.createInjector().getInstance(Constructor.class).sunyang.print();
  }
}

使用构造方法进行注入可以保证接口Sunyang只在类初始化时被注入,构造方法的注入是唯一的。运行代码如图12-4所示。
3.使用setter方法进行注入
使用setter方法进行注入,需要在类中增加对成员变量设置的setter方法,同时通过标注@Inject将其声明,然后在main方法中将其取出,如代码12-12所示。
代码12-12  setter方法注入
package sunyang.inject;
import sunyang.Sunyang;
import com.google.inject.Guice;
import com.google.inject.Inject;
public class Setter {
  private Sunyang sunyang;
  @Inject
  public void setSunyang(Sunyang sunyang) {
    this.sunyang = sunyang;
  }
  public static void main(String[] args) {    
    Guice.createInjector().getInstance(Setter.class)
.sunyang.print();
  }
}
此方法是在对象sunyang被构造的时候才进行注入的,相对于构造方法更加灵活。
上文中Guice为我们提供了3种注入,这3种注入方法各有其优缺点,可以根据实际需要灵活使用。

本文出自 “范立锋” 博客,请务必保留此出处http://fanlifeng.blog.51cto.com/822773/232571

分享至
更多
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别:技术文章技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2009-11-25 09:47:40
不错不错。。。学习

2009-11-25 11:11:36
对guice不是很了解
有时间研究下

2010-08-23 10:54:23
你好,我想选你的xml实用教程做课本,但人民邮电的网上找不到ppt呀,总算找到你的博客了,你有没有ppt可以发给我吗?多谢呀。马上要开学了,你快点呀!

 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: