2

Spring インジェクションの仕組みについて質問がありますか? クラスとそのすべてのサブクラスに同じサービスを注入すると、非効率になりますか? Springのコンテナはこれをどのように保存/制御しますか?

public class baseClass {
    @Autowired
    private iService serviceName
}

public class extendedClassA extends baseClass {
    @Autowired
    private iService serviceName
}

public class extendedClassB extends extendedClassA {
    @Autowired
    private iService serviceName
}

ありがとう..

4

2 に答える 2

1

試したことはありませんが、問題が発生すると思います。

主な問題はSpringによるものではなく、例の可変シャドウイングによるものです。BaseClass'serviceNameは子クラスによってシャドウされます。つまり、特別な処理を行わないと、BaseClass'serviceNameは null になります。

あなたはこれを行うことを検討したいかもしれません:

// !!!! Mind your naming convention!!!!!!
public class BaseClass {
    @Autowired
    private FooService fooService;

    protected FooService getFooService() {
        return this.fooService;
    }

    public setFooService(FooService fooService) { ... }
}

public class ExtendedClassA extends BaseClass {
    // no need to inject fooService again, whenever it need to use that,
    // simply do getFooService() and use it
}
于 2012-08-30T01:37:32.853 に答える
0

Adrian Shum の応答は問題ないようですが、プロパティ「abstract=true」を使用して、applicationContext ファイルで BaseClass Bean も宣言する必要があります。

<bean id="baseClass" class="BaseClass" abstract="true"/>
于 2012-08-30T09:44:27.603 に答える