几个关于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对象实例?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值