@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
是可选的,但在大多数情况下您会希望使用它。
我在教程中看到说在 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
是可选的,但在大多数情况下您会希望使用它。