3

他の depeandant Bean が作成されるまで @Autowire 一部の Bean を回避することは可能ですか? 例を挙げて説明しましょう。

aというプロパティを持つタイプAのオブジェクトを作成する FactoryBean があります。プロパティが null の場合、Bean Aにデフォルト値が割り当てられます。

@Configuration クラスには次のものがあります。

    @Autowired
    プライベート myBean;

何が起こっているのかというと、ファクトリが Bean を作成することです (方法は完全にはわかりません) が、ファクトリのフィールドaは null であり、 A の作成に使用される別の Bean が必要です。Factory は外部依存関係の内部にあるため、注釈を追加できません。

問題は、@Autowired がファクトリにオブジェクトを要求する前に、aの値を設定する必要があるということです。私が持っている制限を考えると、それは可能ですか?

編集 コードは次のとおりです。

@Configuration
@ImportResource("classpath:factory-context.xml")
public class ServiceContextConfig {
    @Autowired
    private A createdObject;

    @Bean(name = "entities-list")
    public List<String> getEntity() {
        List<String> ls = new ArrayList<String>();
        ls.add("countriescatalog");
        return ls;
    }

次に、factory-context.xml は次のようになります。

<bean id="client-factory" class="ClientFactory">
    <property name="entities" ref="entities-list"/>
</bean>

実際の構成はもう少し大きいです。このような単純化された例は試していません。このような単純化されたコンテキストで再現して、@emd が提案したようにファクトリをラップして修正できるかどうかを確認します。

4

2 に答える 2

1

質問を正しく理解できたと思います。しかし、ここであなたができることの例:

工場を自社工場で包み込みます。自分の工場でそのフィールドを自動配線します。元のファクトリでオブジェクトを構築し、フィールドを注入してオブジェクトを返します。

例:

public class MyFactory {

    @Autowired
    private A a;

    private final OriginalFactory originalFactory;

    public MyFactory(OriginalFactory originalFactory) {
        this.originalFactory=originalFactory;
    }

    public CreateObject getInstance() {

        CreatedObject createdObject = originalFactory.getInstance();
        createdObject.setA(a);

        return createdObject;
    }
}

スプリング部:

<bean id="myFactory" class="aa.aa.MyFactory">
    <constructor-arg ref="originalFactory" />  
</bean>         
<bean id="createdObject" factory-bean="myFactory" factory-method="getInstance"/>
于 2013-03-21T21:23:24.510 に答える