精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-17
搂主提的问题大都是围绕实例来说的,但是我觉得Guice是针对接口和接口的不同实现类之间的绑定,使我们可以只关注面向接口的编程。比如实现类是连接RDB还是LDAP还是其它的数据源我们并不关心,这使我们的程序容易扩展。
|
|
返回顶楼 | |
发表时间: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。不过还是谢谢了。 |
|
返回顶楼 | |
发表时间:2008-04-17
javazhujf 写道 搂主提的问题大都是围绕实例来说的,但是我觉得Guice是针对接口和接口的不同实现类之间的绑定,使我们可以只关注面向接口的编程。比如实现类是连接RDB还是LDAP还是其它的数据源我们并不关心,这使我们的程序容易扩展。
你说的这个只是Guice提供的一部分功能。没有接口的类很多,例如POJO。 |
|
返回顶楼 | |
发表时间:2008-04-17
主要还是没有看懂到底问题是什么。怎么需要这些holder类的呢?还是觉得让例子说话比较好。比如如果你手工注入的话是什么样子的?
|
|
返回顶楼 | |
发表时间:2008-04-22
ajoo 写道 主要还是没有看懂到底问题是什么。怎么需要这些holder类的呢?还是觉得让例子说话比较好。比如如果你手工注入的话是什么样子的?
例子涉及到很多第三方的类库,讲解起来反而麻烦。 这段时间正在努力把Guice整合到项目中去,忙得要死,等到整合完毕来,再来这里发表一下感想。 |
|
返回顶楼 | |
发表时间:2008-04-24
sigh... 真不知道在说什么, 也不知道我理解到多少. 但总归来说, 感觉还是个设计问题. 不妨退一步看看是不是自己的设计正确, 或者如果没有A框架B框架你该怎么做.
这什么动态注入, 真的需要注入么? 用注入的描述和注入工厂产生你要被注的对象可以么? 或者一共有多少种, 少的话就变成静态的呗. |
|
返回顶楼 | |