欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-09 10:27:05
...
最近考虑在项目中使用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对象实例?

上一篇: 快速幂取模

下一篇: 快速幂取模