@ComponentScan是否自动将@Configuration类注册到当前应用程序上下文?

时间:2016-07-02 09:37:55

标签: java spring

在下面的代码中,AppConfig已注册到应用程序上下文,但FooConfig未注册。并且FooConfig也未导入AppConfig 但是,应用程序上下文可以扫描FooConfig,它会将FooConfig注册到应用程序上下文。并且FooConfig中定义的bean可以在当前上下文中发现 我理解正确吗?
因此,如果导入的配置类在扫描范围内,@Import是可选的,对吧?

package app;
@Configuration
public class FooConfig { @Bean public Foo foo() { return new FooImpl(); } }

package app;
@Configuration
@ComponentScan("app")
public class AppConfig {  }

package app;
public class App {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        Foo f = (Foo) context.getBean("foo");
    }
}

1 个答案:

答案 0 :(得分:0)

是。因为@ComponentScan初始化设置会从app包中获取所有内容,包括FooConfig。没有它,您将需要显式导入。

或者,您可以直接为ApplicationContext构造函数提供所有配置类:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class, FooConfig.class);