2017-01-06 1 views
0

나는 Guice를 사용하여 구현 된 프로젝트에서 일하고있다.하지만 우리는 이것을 Spring 3.x로 옮겨야한다. 그리고 콩이 생성을위한 추가적인 파라미터를 필요로하는 곳에서이 유즈 케이스를 가지고있다. Spring에서 어떻게 구현됩니까? 어노테이션 (xml 없음)만을 사용하여 구현할 수 있습니까?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을 반환하는 factory 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 작성 메소드 및 CarImpl 생성자의 특성을 수정하십시오. 나는 모든 InsuranceContract Bean에 대해 CarFactory 빈을 만들고 싶지 않다고 생각한다. –

+0

그냥 만들었지 만 그 유형의 유스 케이스도있다. –

관련 문제