我愛熊貓

          最新評論

          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 閱讀(166) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 武平县| 来凤县| 龙胜| 监利县| 常宁市| 齐河县| 略阳县| 南木林县| 新郑市| 张家川| 霍林郭勒市| 铜陵市| 三穗县| 池州市| 南溪县| 象州县| 波密县| 文化| 石嘴山市| 营口市| 灌南县| 讷河市| 信丰县| 玉溪市| 翁源县| 龙游县| 马鞍山市| 庄河市| 客服| 彭州市| 固阳县| 峨山| 平谷区| 临颍县| 稷山县| 崇阳县| 石景山区| 罗定市| 呼和浩特市| 长宁区| 六枝特区|