首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹簧AutoConfiguration手动导入所有组件

弹簧AutoConfiguration手动导入所有组件
EN

Stack Overflow用户
提问于 2021-09-16 19:13:07
回答 4查看 421关注 0票数 0

我有下面的自动配置类。

代码语言:javascript
运行
复制
@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。

我真的必须像上面所示那样将它们全部包括在内吗?还是有任何其他方法来自动检测带注释的服务、组件或配置的类?

!这是初学者库,不是可执行的应用程序!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-09-21 05:34:57

“库”的问题是,它已经需要很多移动部件,比如Spring,正确地设置JPA。如果这是不可用的,它将失败,或者如果添加@EnableJpaRepositories和/或诸如@ComponentScan@EntityScan之类的东西,它将(非常严重)干扰Spring或客户端的(自动)配置。这就是你想要阻止的。

而不是所有这些注释,您需要做的是

  1. 有条件地启用@EnableJpaRepositories或只包含依赖项并让自动配置启动(我建议后者)
  2. 不要添加@ComponentScan@EntityScan等,而是使用为初学者设计的@AutoConfigurationPackage
代码语言:javascript
运行
复制
@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties({LoggerProviderProperties.class})
@AutoConfigurationPackage
public class ProviderAutoConfiguration {

}

注意:--这假定ProviderAutoConfiguration与其他类在同一个或更高的包中。如果不指定basePackages,则在@AutoConfigurationPackage中指定。

票数 1
EN

Stack Overflow用户

发布于 2021-09-16 21:10:14

票数 0
EN

Stack Overflow用户

发布于 2021-09-17 00:20:27

假设您正在使用Spring,至少根据您的标记,您应该看看@SpringBootApplication

@SpringBootApplication用它们的默认属性封装@Configuration@EnableAutoConfiguration@ComponentScan注释。@ComponentScan的默认值意味着使用@ComponentScan的包上的所有子包都会被扫描。这就是为什么将主类包含在项目的基本包中通常是一个很好的实践。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69213950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档