Есть ли у Guice возможность просто создать несколько объектов/компонентов с разными значениями/параметрами? Например, скажем, у меня есть класс Triangle
, и я хочу в конфигурации создать несколько треугольников, один с параметром lengh = 6
, один с length = 5
и пусть скажем другой без параметров вообще. Если я пытаюсь что-то вроде этого:Java Guice - эквивалентный способ создания нескольких «бобы», как весной?
bind(Triangle.class).to(IsoTriangle.class);
bind(Triangle.class).toInstance(new Triangle(6));
Я получаю сообщение об ошибке:
A binding to test.Triangle was already configured at test.Configuration.configure(Configuration.java:14). at test.Configuration.configure(Configuration.java:15)
Если я пытаюсь вызвать два экземпляра треугольника в основной метод, как:
Triangle tr = injector.getInstance(Triangle.class);
Triangle tr2 = injector.getInstance(Triangle.class);
Второй экземпляр просто игнорируется, поскольку я не вижу, что он используется второй раз.
Я читал, что есть что-то вроде этого:
class LegModule extends PrivateModule {
private final Class<? extends Annotation> annotation;
LegModule(Class<? extends Annotation> annotation) {
this.annotation = annotation;
}
@Override protected void configure() {
bind(Leg.class).annotatedWith(annotation).to(Leg.class);
expose(Leg.class).annotatedWith(annotation);
bindFoot();
}
abstract void bindFoot();
}
public static void main(String[] args) {
Injector injector = Guice.createInjector(
new LegModule(Left.class) {
@Override void bindFoot() {
bind(Foot.class).toInstance(new Foot("leftie"));
}
},
new LegModule(Right.class) {
@Override void bindFoot() {
bind(Foot.class).toInstance(new Foot("righty"));
}
});
}
Но это больше похоже на трюк/взломать (вам нужно сделать такого рода вещи в основном методе, как весной вы не делаете. нужно что-то делать вообще, но я полагаю, что идеи для этих фреймворков совершенно разные). Есть ли у Guice простой способ сделать это или Guice цель заключается в связывании все к одному экземпляру и не позволяют создавать несколько те же объекты типа ..
Update Весной прямо вперед: Например, чтобы создать несколько треугольников, я могу просто сделать это:
<bean id="triangle1"
class="test.Triangle"
>
<constructor-arg type="int" value="6"/>
</bean>
<bean id="triangle2"
class="test.Triangle"
>
<constructor-arg type="int" value="5"/>
</bean>
могли бы вы записать то, что вы могли бы сделать весной? Может помочь понять, чего вы хотите. – nhu
См. Https://code.google.com/p/google-guice/wiki/InjectingProviders. Он покажет вам, как получить несколько экземпляров того же типа. Но он не говорит вам, как получить несколько разных экземпляров. –
@ArnaudDenoyelle, поэтому мне нужно создать какой-то метод, который создает несколько экземпляров? Поэтому каждый раз, когда я захочу добавить/удалить экземпляр, мне нужно будет изменить этот метод? – Andrius