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

最近考虑在项目中使用guice,但是在替换一些Design patterns时遇到一些问题,特来这里向大家请教。

Guice的文档实在是太简单了,基本上就是几个简单的对象来回映射,对实际开发基本上没什么用。网上的例子也基本上停留在1+1=2的水平。

下面是我遇到的问题:

1. 如何在运行时态注入同一个对象的不同的实例?
   首先一个POJO:
 public class Foo {

    private boolean a;
    private boolean b;

    @inject
    public Foo(boolean a, boolean b) {
        this.a = a;
        this.b = b;
    }
} 


然后使用它:
public class FooContainer {

    @inject
    private Foo foo;

} 


我的问题是,Foo对象根据属性不同可以生成4中不同的实例,那么如何能够在runtime动态注入不同的实例呢?
另外,使用@Name注释可以绑定不同的实例,但是似乎无法动态绑定,而且如果类属性比较多的话,把每一种可能的实例都绑定起来,岂不是要吐血了。

2. 如何在runtime动态绑定任意对象?

 public class Foo {
           @inject
           private Object o;
     } 

这个例子里,Foo对象需要使用任意类型的对象实例,如何用Guice动态注入?类型为Object的对象实例为无限多,用@Name应该是解决不了问题了。

3. 如何解决传递对象问题?
   在API调用过程中,借助方法参数,可以将某一个对象实例在几个对象之间来回传递,而且它也不是singelton,这个被传递的对象不一定是Value Object。如果使用Guice的话如何实现?

4. 如何解决动态扩展的问题?
   为了便于理解,我举个简单的例子,MVC模式大家应该都很清楚,假如一个Control对应一个Model的话,用Guice可以完美实现。但是如果一个Control可以控制多个Model,而Model的数量是动态的,也就是说Control需要在runtime创建新的Model,同时还要保存已经存在的Models。针对这种情况,如何使用Guice注入?

5. 如何注入String?
   我刚刚开始接触Guice,估计用过Guice的朋友能够马上回答这个问题。先举个例子:
 public class Foo {

    @inject
    private String a;

    public Foo(String a) {
        this.a = a;
    }
} 


在使用Foo对象时,如何动态注入不同的String值?
其实这个问题和前面的几个问题类似,但是String是一个比较特殊的对象,所以单独拿出来提问。

6. 如何解决类关联的问题。例如:

public class Foo {

    private Bar bar;

    public Foo() {
        bar = new Bar(this);
    }

public class Bar {

    private Foo foo;

    public Bar(Foo foo) {
      this.foo = foo;
    }

如何保证使用guice注入后,bar中的foo是创建Bar的那个Foo对象实例?

你可能感兴趣的:(spring,c,Google,C#,IOC)