我有下面的自动配置类。
@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties({LoggerProviderProperties.class})
@Import({LoggerController.class, LogService.class, LogConfig.class})
public class ProviderAutoConfiguration {
}
我需要使用@import注释导入所有组件、服务、配置,否则,当我从@Import中删除LogService.class (LogController自动导入文件LogService)时,它会引发以下错误
考虑在您的配置中定义'com.log.LogService‘类型的bean。
我真的必须像上面所示那样将它们全部包括在内吗?还是有任何其他方法来自动检测带注释的服务、组件或配置的类?
!这是初学者库,不是可执行的应用程序!
发布于 2021-09-21 05:34:57
“库”的问题是,它已经需要很多移动部件,比如Spring,正确地设置JPA。如果这是不可用的,它将失败,或者如果添加@EnableJpaRepositories
和/或诸如@ComponentScan
和@EntityScan
之类的东西,它将(非常严重)干扰Spring或客户端的(自动)配置。这就是你想要阻止的。
而不是所有这些注释,您需要做的是
@EnableJpaRepositories
或只包含依赖项并让自动配置启动(我建议后者)@ComponentScan
、@EntityScan
等,而是使用为初学者设计的@AutoConfigurationPackage
。@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties({LoggerProviderProperties.class})
@AutoConfigurationPackage
public class ProviderAutoConfiguration {
}
注意:--这假定ProviderAutoConfiguration
与其他类在同一个或更高的包中。如果不指定basePackages
,则在@AutoConfigurationPackage
中指定。
发布于 2021-09-16 21:10:14
发布于 2021-09-17 00:20:27
假设您正在使用Spring,至少根据您的标记,您应该看看@SpringBootApplication
。
@SpringBootApplication
用它们的默认属性封装@Configuration
、@EnableAutoConfiguration
和@ComponentScan
注释。@ComponentScan
的默认值意味着使用@ComponentScan
的包上的所有子包都会被扫描。这就是为什么将主类包含在项目的基本包中通常是一个很好的实践。
https://stackoverflow.com/questions/69213950
复制相似问题