2017-01-06 1 views
0

私はGuiceを使って実装されたプロジェクトで作業していますが、Spring 3.xに移行する必要があります。ここでは、Beanの作成に追加のパラメータが必要な場合の使用例があります。これはSpringでどのように実装されていますか?アノテーションのみを使用して実装することは可能ですか?GuiceからSpringに@Assistedを使用してBeanを「追加パラメータとともに」移行する方法は?

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(); 
    } 
} 

答えて

2

CarImplを返すファクトリBeanが必要なようです。

public interface CarFactory { 
    Car create (String brand, String model); 
} 


@Bean 
public CarFactory carFactory() { 
    return CarImpl::new; 
} 
+0

ありがとうございました!この仕事は豆と同様に混じりますか?たとえば、createにbeanがある場合。 'create(Stringブランド、Stringモデル、@Bean InsuranceContract保険)'? –

+0

InsuranceContractを受け入れるように、CarFactory createメソッドとCarImplコンストラクタのシグネチャを変更します。すべてのInsuranceContract BeanのCarFactory Beanを作成したいとは思わない –

+0

ちょうどそれを作成しましたが、そのタイプのユースケースもあります。 –

関連する問題