@ComponentScan 真的是可选的吗?

is @ComponentScan really optional?

我在教程中看到说在 java 配置文件中使用 @ComponentScan 是可选的,但是当我 运行 我的代码没有 @ComponentScan 时它给了我一个错误。

代码本身并不重要。我只是为了更好地理解而添加它

AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(SportConfig.class);

    Coach baseBallCoach= context.getBean("baseBallCoach", Coach.class);
    System.out.println(baseBallCoach.getDailyWorkout());
    System.out.println(baseBallCoach.getDailyFortune());
    context.close();

输出:

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'baseBallCoach' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:863)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1344)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:309)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1160)
at org.isoft.Main.main(Main.java:14)

它是可选的,但如果没有它,您将需要做更多的工作来配置所有 bean。使用 @ComponentScan 任何 class 注释 @Component @Service 和少数其他注释将被自动发现。如果您不使用 @ComponentScan,则必须使用 @Bean 或其他方式在 @Configuration class 中定义所有 bean。因此,虽然 @ComponentScan 是可选的,但在大多数情况下您会希望使用它。