Spring可以在不使用构造函数的情况下基于限定符注释创建不同配置的bean吗?

时间:2015-02-17 07:35:42

标签: java spring dependency-injection

我想要的是配置内部依赖性略有不同的两个(或更多)单身人士。

我们说我有车:

@Component
public Car {
    @Inject private Engine engine;
    @Inject private Chassis chassis;
}

现在引擎有两种变体,@标准和@Powerful

我想要的是注入一辆汽车,并使用@Standard或@Powerful对此注射进行限定,而无需自己创建2个Car实例。

换句话说,当我写:

@Inject @Powerful Car car;

我希望Spring使用标准机箱和强大的引擎创建(或使用现有的)单体汽车。

但是当我写道:

@Inject @Standard Car car;

我希望Spring使用标准机箱和标准引擎创建(或使用现有的)单件车。

到目前为止,我只能通过赋予Car一个构造函数并在@Configuration类中自己执行此操作来管理它。对于这个例子来说这是可以的,但是如果有10次注射汽车则很烦人。

@Bean @Powerful
public Car car1() {
    return new Car(new PowerfulEngine(), new Chassis());
}

@Bean @Standard
public Car car1() {
    return new Car(new StandardEngine(), new Chassis());
}

@Bean @Standard @Sedan
public Car car1() {
    return new Car(new StandardEngine(), new SedanChassis());
}

etc...

必须有一种更简单的方法......

春天可以为我创造这两种豆子吗?如果有3种发动机类型,那么更多呢?或3种发动机类型和5种底盘类型(意味着可以有15种不同配置的Car对象)?

即:

@Inject @Powerful @Sedan Car car;

@Sedan是机箱变体......

0 个答案:

没有答案