首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

google guice 入门学习札记(一)

2012-10-29 
google guice 入门学习笔记(一)package com.bcw.testimport com.google.inject.ImplementedBy@Implement

google guice 入门学习笔记(一)

package com.bcw.test;import com.google.inject.ImplementedBy;@ImplementedBy(HelloGuiceImpl.class)public interface HelloGuice {        public void sayHello();}
?
package com.bcw.test;public class HelloGuiceImpl implements HelloGuice {@Overridepublic void sayHello() {System.out.println("hello");}}
?



下面是需要调用这个接口的3类,分别采用构造器,set方法,和字段注入:

package com.bcw.test;import com.google.inject.Inject;public class Client {private final HelloGuice hello;//构造函数方式注入@Injectpublic Client(HelloGuice hello) {this.hello = hello;}public HelloGuice getHello() {return hello;}}
?
package com.bcw.test;import com.google.inject.Inject;public class Client2 {private HelloGuice hello;public HelloGuice getHello() {return hello;}// set方法注入@Injectpublic void setHello(HelloGuice hello) {this.hello = hello;}}
?


package com.bcw.test;import com.google.inject.Inject;public class Client3 {// 字段注入@Inject private HelloGuice hello;public HelloGuice getHello() {return hello;}}
?


以下是测试用例:

package com.bcw.test;import junit.framework.TestCase;import com.google.inject.Guice;import com.google.inject.Injector;public class TestHelloGuice extends TestCase {public void testSayHello() {Injector injector = Guice.createInjector();HelloGuice helloGuice = injector.getInstance(HelloGuice.class);helloGuice.sayHello();// 构造器注入Client c = injector.getInstance(Client.class);c.getHello().sayHello();// set方法注入Client2 c2 = injector.getInstance(Client2.class);c2.getHello().sayHello();// 字段注入Client3 c3 = injector.getInstance(Client3.class);c3.getHello().sayHello();}}
?


console打印输出:

hellohellohellohello

?



推荐使用构造器注入方式.

?

1 楼 readythink 2009-05-21   谢谢楼主.正准备看看guice. 2 楼 sogo1986 2009-05-21   顶。guice和spring都是不错的IOC容器 3 楼 kjj 2009-05-21   那个implementBy()好像有点繁琐,难道以后要一个一个的找出来些进去! 4 楼 bcw104 2009-05-22   kjj 写道那个implementBy()好像有点繁琐,难道以后要一个一个的找出来些进去!
    你不告诉guice是谁来实现的这个接口,gui是不会自己就知道你的实现类是哪个的?
就如同你在spring里面配置<bean>一样,你不配置它能实例化一个bean出来吗?
    当然了你可以不用@implementBy(),你完全可以在使用这个接口的实现类的时候用@Inject或者用provider方法,但同样的你还是要告诉guice你的实现类是谁的.

热点排行