Java 如果我们不';在spring引导中,在@Configuration类下定义@Bean
因此,通常当我们编写一个类并向该类添加@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
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。这是绝对好的。