0
Я работаю над проектом, который был реализован с использованием Guice, но нам нужно перенести его на Spring 3.x, и у нас есть этот прецедент, где beans нуждаются в дополнительных параметрах для создания. Как это реализовано весной? можно ли реализовать только аннотации (и без xml)?Как перенести bean-компонент с дополнительными параметрами, используя @Assisted от Guice to Spring?
import com.google.inject.AbstractModule;
import com.google.inject.assistedinject.FactoryModuleBuilder;
import com.google.inject.assistedinject.Assisted;
import javax.inject.Inject;
public class MyModule extends AbstractModule {
@Override
protected void configure() {
super.binder().install(new FactoryModuleBuilder().
implement(Car.class, CarImpl.class).
build(CarFactory.class));
}
}
public interface Car {
String getBrand();
String getModel();
}
public class CarImpl implements Car {
public CarImpl(@Assisted("brand") String brand, @Assisted("model") String model) {
this.brand = brand;
this.model = model;
}
@Override
String getBrand() { return brand; }
@Override
String getModel() { return model; }
private final String brand;
private final String model;
}
public interface CarFactory {
Car create(@Assisted("brand") String brand, @Assisted("model") String model);
}
public class Client {
@Inject CarFactory carFactory;
final Car myCar;
public Client() {
myCar = carFactory.create("BMW", "530d xDrive");
}
void driveIt() { /* don't crash it */ }
public static void main(String[] args) {
new Client().driveIt();
}
}
Thanks! Смешивается ли это с фасолью, например, если у создателя есть компонент, например. 'create (String brand, String model, @Bean InsuranceContract insurance)'? –
Измените подпись метода создания CarFactory и конструктора CarImpl, чтобы принять InsuranceContract. Я не думаю, что вы хотели бы создать компонент CarFactory для каждого компонента InsuranceContract Bean. –
Просто сделал это, но у нас тоже есть такой вариант использования. –