我正在尝试创建一个新的启动器.我有一个业务模块,比如ProjectManager,它包含一些用@Component注释的类.在本教程之后,我创建了一个autoconfigure模块,它包含一个AutoConfiguration类.首先,我尝试使用@ComponentSan在我的业务模块中查找bean.
@ComponentScan(value = {"com.foo.project"}) @ConditionalOnClass({Project.class}) @Configuration public class ProjectAutoConfiguration { .... }
但它不起作用.我必须添加其他配置类,如下所示:
@Configuration @ComponentScan(value = {"com.foo.project"}) @MapperScan(value = {"com.foo.project"}) public class ProjectConfig { }
然后将其导入AutoConfiguration类,如下所示:
@Import(ProjectConfig.class) @ConditionalOnClass({Project.class}) @Configuration public class ProjectAutoConfiguration { .... }
这样可行.但根据春季文件.
自动配置使用标准的@Configuration类实现
所以我的问题是,为什么@ComponentScan在这里不起作用?我做错了什么?或者它是按设计的?
你必须将compentscan注释用于主类.这是一个示例代码:
@SpringBootApplication @ComponentScan("com.foo.project") public class MainApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MainApplication.class); } public static void main(String[] args) { new MainApplication().configure(new SpringApplicationBuilder(MainApplication.class)).run(args); } }
干杯
自动化所有内容都需要Application类(使用@SpringBootApplication注释)位于比要扫描的组件更"高"的包中.
使用:
package com.example.foo;
为您的应用程序,并将组件放在一个包,如:
package com.example.foo.entities;
另请参见https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-using-springbootapplication-annotation.html