Java 如果我们不';在spring引导中,在@Configuration类下定义@Bean

Java 如果我们不';在spring引导中,在@Configuration类下定义@Bean,java,spring,spring-boot,Java,Spring,Spring Boot,因此,通常当我们编写一个类并向该类添加@Configuration时,我们将在该类中定义bean,例如: @Configuration public class AppConfig { @Bean public DemoClass service() { } } 但是我们回顾了一些代码,我看到一些类没有在这些类中定义@bean方法,比如: @Configuration public class AutoRefreshConfig {

因此,通常当我们编写一个类并向该类添加@Configuration时,我们将在该类中定义bean,例如:

@Configuration
public class AppConfig {
    @Bean
    public DemoClass service() 
    {
        
    }
}
但是我们回顾了一些代码,我看到一些类没有在这些类中定义@bean方法,比如:

@Configuration
public class AutoRefreshConfig {
    @Scheduled(fixedRate = 60000)
    public void update(){
      // update something with a fix rate

    }
}


那么这是正确的吗?实际上它工作得很好。但是我想知道当我开始运行这个项目时会发生什么。spring boot将采取什么样的行为?它是否与普通java类一样?

调度的
@Scheduled
注释导致Spring创建一个实现来执行提供的
可运行的
(在本例中,是
void update()
方法)。根据报告:

“默认”实现是包装本机并添加扩展触发器功能


为了回答您的问题,Spring最终使用您的注释创建了
ScheduledExecutorService
,这是
java.util.concurrent
包中的本机执行器服务,要以您提供的所需频率执行任务,
预定的
注释会导致Spring创建一个实现来执行您提供的
可运行的
(在本例中,是
无效更新()
方法)。根据报告:

“默认”实现是包装本机并添加扩展触发器功能


为了回答您的问题,Spring最终使用您的注释创建了
ScheduledExecutorService
,这是
java.util.concurrent
包中的本机执行器服务,要以您提供的所需频率执行任务

@Configuration
是一种特殊类型的
@组件
,其中带注释的类可以包含bean定义(使用
@bean
)。但如果它不包含任何bean定义,spring不会抛出任何异常。事实上,配置类仍然可以用作类似于
@Component
注释类的bean,并且可以在依赖类中自动连接

上面引用的代码实际上应该用
@Component
进行注释,因为它没有bean定义,但是由于
@Configuration
本身用
@Component
进行元注释,它仍然可以工作。代码在语法上是正确的,但它不遵循spring约定


@Configuration
也是一个
@Component
,反之亦然。

@Configuration
是一种特殊类型的
@Component
,其中注释类可以包含bean定义(使用
@bean
)。但如果它不包含任何bean定义,spring不会抛出任何异常。事实上,配置类仍然可以用作类似于
@Component
注释类的bean,并且可以在依赖类中自动连接

上面引用的代码实际上应该用
@Component
进行注释,因为它没有bean定义,但是由于
@Configuration
本身用
@Component
进行元注释,它仍然可以工作。代码在语法上是正确的,但它不遵循spring约定


@配置
也是
@组件
,反之亦然。

当JavaConfig遇到带有
@Bean
注释的方法时,它将执行该方法,并将返回值注册为BeanFactory中的bean,BeanFactory由Spring上下文管理,该引用可以使用
@Autowired
配置在应用程序中的任何位置使用。现在谈谈您的主要问题,如果您有一个配置类,但没有任何方法具有
@Bean
注释,那么它将不会注册任何Bean。当JavaConfig遇到这样一个带有
@Bean
注释的方法时,它将执行该方法,并将返回值注册为BeanFactory中的一个Bean,BeanFactory由Spring上下文管理,该引用可以使用
@Autowired
配置在应用程序中的任何位置使用。现在谈谈您的主要问题,如果您有一个配置类,但没有任何方法具有
@Bean
注释,那么它将不会注册任何Bean。这是绝对好的。