LoginSignup
0
1

More than 5 years have passed since last update.

springで@Import対象は@Configuration扱いになる

Posted at

springで@Importされるjava configクラスを作成していた。このとき、その設定クラスは@Configurationを付けなくても@Importすればクラス内の@Beanが登録されるのが、なんか不思議だったのでその辺を勉強するべくソースコードを見てみた。

pom.xml
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>

ソースを追ってみると、ApplicationContextの細かいところは省くが、@Importの処理をしているのはこの辺らしい。以下のメソッドではimport候補クラスのコレクションを渡されて、それを一つずつ処理している。

ConfigurationClassParser
package org.springframework.context.annotation;

class ConfigurationClassParser {
    private void processImports(/*...(略)...*/, Collection<SourceClass> importCandidates, /*...(略)...*/) {
                // ...(略)
                for (SourceClass candidate : importCandidates) {
                    if (candidate.isAssignable(ImportSelector.class)) {
                        // ...(略)
                    else if (candidate.isAssignable(ImportBeanDefinitionRegistrar.class)) {
                        // ...(略)
                    else {
                        // Candidate class not an ImportSelector or ImportBeanDefinitionRegistrar ->
                        // process it as an @Configuration class
                        this.importStack.registerImport(
                                currentSourceClass.getMetadata(), candidate.getMetadata().getClassName());
                        processConfigurationClass(candidate.asConfigClass(configClass));

このとき、条件付きimportをする@ImportSelector@ImportBeanDefinitionRegistrarが付与されていれば、それ専用の処理が行われる。しかし、それらアノテーションではない場合、コード内のコメントにあるように「import候補クラスがImportSelectorないしImportBeanDefinitionRegistrarでは無い場合は@Configuration扱いで処理する」となる。

なので、@Import対象クラスは@Configurationと見なされる、と考えても基本的には良さそうである。もちろん細かくは色々違いはあるだろうけど。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1