论坛首页 Java企业应用论坛

几个关于Guice的问题,关心Guice的请进

浏览 12181 次
精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-17  
搂主提的问题大都是围绕实例来说的,但是我觉得Guice是针对接口和接口的不同实现类之间的绑定,使我们可以只关注面向接口的编程。比如实现类是连接RDB还是LDAP还是其它的数据源我们并不关心,这使我们的程序容易扩展。
0 请登录后投票
   发表时间:2008-04-17  
birdjavaeye 写道
polygoncell 写道
非常感谢,写了这么一大堆。:-)

这种做法和我考虑的一样,问题是这样也太麻烦了吧!
只是 new FooContainer(new Foo(true, false))和new FooContainer(new Foo(false, true))就能搞定的,结果用Guice写了这么多代码。

还有就是关于String的那个问题还存在。我再举例说明一下。在程序的某处需要Foo对象,例如Foo("ABC"), 过段时间,在其他地方又需要Foo("DEF"), 再过段时间,又需要Foo("XZY")就这样继续下去。。。。。。

我怎么用一个Foo类类实现这些映射?这些String之间并没有任何规律可循。


可以试试objot2的ioc容器
Container stub = new Factory() {
  @Override
  protected Object doBind(Class<?> c, Bind b) throws Exception {
    if (c == Foo.class)
      return b.mode(Inject.Set.class); // 通过set来指定对象
    return b;
  }
}.bind(Foo.class).create(null);

Container c1 = stub.create();
c1.set(Foo.class, new Foo(true, false));

Container c2 = stub.create();
c2.set(Foo.class, new Foo(false, true));

这样c1、c2就可以绑定Foo到不同的对象上

不同时候要不同Foo时,如果流程上的先后能确定,那可以:
Container c = stub.create();
...
c.set(Foo.class, foo1);
c.get(FooClient1.class);
...
c.set(Foo.class, foo2);
c.get(FooClient2.class);
...

不过那些在set前就由容器创建的对象(例如已经获取的singleton)看不到set的东西



这个..... 我目前只考虑Guice。不过还是谢谢了。
0 请登录后投票
   发表时间:2008-04-17  
javazhujf 写道
搂主提的问题大都是围绕实例来说的,但是我觉得Guice是针对接口和接口的不同实现类之间的绑定,使我们可以只关注面向接口的编程。比如实现类是连接RDB还是LDAP还是其它的数据源我们并不关心,这使我们的程序容易扩展。


你说的这个只是Guice提供的一部分功能。没有接口的类很多,例如POJO。
0 请登录后投票
   发表时间:2008-04-17  
主要还是没有看懂到底问题是什么。怎么需要这些holder类的呢?还是觉得让例子说话比较好。比如如果你手工注入的话是什么样子的?
0 请登录后投票
   发表时间:2008-04-22  
ajoo 写道
主要还是没有看懂到底问题是什么。怎么需要这些holder类的呢?还是觉得让例子说话比较好。比如如果你手工注入的话是什么样子的?


例子涉及到很多第三方的类库,讲解起来反而麻烦。

这段时间正在努力把Guice整合到项目中去,忙得要死,等到整合完毕来,再来这里发表一下感想。
0 请登录后投票
   发表时间:2008-04-24  
sigh... 真不知道在说什么, 也不知道我理解到多少. 但总归来说, 感觉还是个设计问题. 不妨退一步看看是不是自己的设计正确, 或者如果没有A框架B框架你该怎么做.

这什么动态注入, 真的需要注入么? 用注入的描述和注入工厂产生你要被注的对象可以么? 或者一共有多少种, 少的话就变成静态的呗.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics