-1

私は次のコードを持っています:

public interface CreatorFactory<E extends Vehicle> {

    public VehicleType<E> getVehicle();

    public boolean supports(String game);
}

public abstract AbstractVehicleFactory<E extends Vehicle>  implements CreatorFactory {

        public VehicleType<E> getVehicle() {

           // do some generic init        

          getVehicle();

        }

        public abstract getVehicle();

        public abstract boolean supports(String game);

}

私は車、トラックなどの複数の工場を持っています..

@Component
public CarFactory extends AbstractVehicleFactory<Car> {

   /// implemented methods

}

@Component
public TruckFactory extends AbstractVehicleFactory<Truck> {

   /// implemented methods

}

私がやりたいのは、実装されたファクトリをリストとして別のクラスにプルすることですが、この場合ジェネリックがどのように機能するかわかりません...春には特定のタイプのすべてのBeanを取得できることを知っています...まだ働いていますか?...

消去すると、ジェネリック型が削除されると思います.. ??

4

2 に答える 2

1

まず、Bean のリストを取得する必要はおそらくないと思います。そして、ジェネリック型で宣言された正確な Bean を取得したいだけです。

Spring フレームワークの BeanFactory インターフェースには、要件に使用するメソッドがあります。

public interface BeanFactory {

    /**
     * Return the bean instance that uniquely matches the given object type, if any.
     * @param requiredType type the bean must match; can be an interface or superclass.
     * {@code null} is disallowed.
     * <p>This method goes into {@link ListableBeanFactory} by-type lookup territory
     * but may also be translated into a conventional by-name lookup based on the name
     * of the given type. For more extensive retrieval operations across sets of beans,
     * use {@link ListableBeanFactory} and/or {@link BeanFactoryUtils}.
     * @return an instance of the single bean matching the required type
     * @throws NoSuchBeanDefinitionException if there is not exactly one matching bean found
     * @since 3.0
     * @see ListableBeanFactory
     */
    <T> T getBean(Class<T> requiredType) throws BeansException;
}

次のようなコードを使用できます。

Car carFactory = applicationContext.getBean( CarFactory.class );
Trunk trunkFactory = applicationContext.getBean( TrunkFactory.class );

または、自動的に注入するための @Qualifier アノテーションを参照してください。

@Component("carFactory")
public CarFactory extends AbstractVehicleFactory<Car> {

   /// implemented methods

}

@Component("truckFactory ")
public TruckFactory extends AbstractVehicleFactory<Truck> {

   /// implemented methods

}

クライアント側のコード:

@Qualifier("carFactory")
@Autowired
private CarFactory carFactory ;

@Qualifier("truckFactory")
@Autowired
private TruckFactory TruckFactory;
于 2013-03-04T13:58:31.403 に答える
0

必要なようです:

@Autowired
List<AbstractVehicleFactory> abstractVehicleFactories;
于 2013-03-04T13:22:04.627 に答える