Java 为什么@SpringBootApplication类中声明的bean即使不是原型类也要注册?

Java 为什么@SpringBootApplication类中声明的bean即使不是原型类也要注册?,java,spring,spring-boot,Java,Spring,Spring Boot,我在我的项目中有这个主要的类 @SpringBootApplication @EnableOAuth2Sso public class App { public static void main(String[] args) throws Exception { SpringApplication.run(App.class, args); } @Bean public RequestContextListener requestContext

我在我的项目中有这个主要的类

@SpringBootApplication
@EnableOAuth2Sso
public class App 
{
    public static void main(String[] args) throws Exception {
        SpringApplication.run(App.class, args);    
    }

    @Bean public RequestContextListener requestContextListener(){
        return new RequestContextListener();
    }

}
据我所知,如果我没有错的话,component scan会扫描原型类中的bean,这些类是
@component、@Service、@Repository、@Controller
中的一个

来自spring文档

默认情况下,用@Component、@Repository、@Service、, @控制器,或使用 @组件是唯一检测到的候选组件

我无法理解这个类中的bean是如何注册的。由于它不是一个原型类,并且没有注释是用
@Component
注释的,所以首先不应该扫描它,但是这段代码工作得很好。事实上,对于我的用例,在这个类中使用bean是解决问题的唯一方法,但这是另一回事。谁能解释一下吗。谢谢

是一个元注释,看起来像:

// Some details omitted
@SpringBootConfiguration
@EnableAutoConfiguration
public @interface SpringBootApplication { ... }
也是一个元注释:

// Other annotations
@Configuration
public @interface SpringBootConfiguration { ... }
是:

其工作原理如下:

默认情况下,用@Component、@Repository、@Service、, @控制器,或使用 @组件是唯一检测到的候选组件。

是一个元注释,看起来像:

// Some details omitted
@SpringBootConfiguration
@EnableAutoConfiguration
public @interface SpringBootApplication { ... }
也是一个元注释:

// Other annotations
@Configuration
public @interface SpringBootConfiguration { ... }
是:

其工作原理如下:

默认情况下,用@Component、@Repository、@Service、, @控制器,或使用 @组件是唯一检测到的候选组件。


这是因为
@SpringBootApplication
还充当
@配置
注释

@Configuration
用于创建xml spring配置文件中的定义bean

您可以有一个bean配置类

@Configuration
class MyConfiguration{
@bean MyBean myBean(){...};
}
o您可以拥有一个Spring配置文件

<beans>
   <bean id="myBean" class="MyBean" />
</beans>

在您的例子中,当您使用
@SpringBootApplication

你可以在这里看到更多


这是因为
@springbootplication
还充当
@配置
注释

@Configuration
用于创建xml spring配置文件中的定义bean

您可以有一个bean配置类

@Configuration
class MyConfiguration{
@bean MyBean myBean(){...};
}
o您可以拥有一个Spring配置文件

<beans>
   <bean id="myBean" class="MyBean" />
</beans>

在您的例子中,当您使用
@SpringBootApplication

你可以在这里看到更多


谢谢你的回答,我不敢相信@Component在那里,我检查了所有的注释,不明白我怎么会错过它。还是谢谢你的帮助!谢谢你的回答,我不敢相信@Component在那里,我检查了所有的注释,不明白我怎么会错过它。还是谢谢你的帮助!谢谢你的帮助,是的,尽管我看了所有的注释,但我还是错过了元注释。谢谢你的回答,我已经投票了,但是已经接受了第一个。谢谢你的帮助,是的,尽管我看了所有的注释,但我还是错过了元注释。谢谢你的回答,我投了更高的票,但已经接受了第一个。