1. ホーム
  2. spring

Springは抽象クラス内部でオートワイヤリングできるのか?

2023-11-03 21:51:43

質問

Springは私のオブジェクトを自動化することができませんか?抽象クラス内のオブジェクトを自動配線することは可能でしょうか?すべてのスキーマがapplication-context.xmlで提供されると仮定します。

質問です。ベースクラスと拡張クラス(もしあれば)@Service @Component にどのようなアノテーションを付けるべきでしょうか?

abstract class SuperMan {

    @Autowire
    private DatabaseService databaseService;

    abstract void Fly();

    protected void doSuperPowerAction(Thing thing) {

        //busy code

        databaseService.save(thing);

    }
}

拡張クラス

public class SuperGirl extends SuperMan {

    @Override
    public void Fly() {
        //busy code
    }

    public doSomethingSuperGirlDoes() {

        //busy code

        doSuperPowerAction(thing)

    }

アプリケーションコンテキスト.xml

<context:component-scan base-package="com.baseLocation" />
<context:annotation-config/>

どのように解決するのですか?

通常、コンポーネントスキャン用に提供されたベースパッケージに抽象クラスが含まれていれば、Springが自動配線を行うはずです。

参照 この この を追加してください。

@Service@Component は、どちらもSpringコンテナ内にアノテーションされた型のBeanを作成するステレオタイプです。Spring Docsにあるように

このアノテーションは@Componentの特殊化として機能し、クラスパススキャンによって実装クラスを自動検出できるようにします。 実装クラスがクラスパススキャンによって自動検出されるようにします。