我正在尝试将项目分为三个模块:核心,管理员和用户,以便我可以通过核心共享通用代码。问题是,当我将所有东西都放在同一包中时,我无法让Spring在不同的主包中拾取自动装配的Bean。
在com.mickeycorp.core程序包中,我具有希望管理员和用户模块使用的模型,服务等。在com.mickeycorp.admin中,我的WebApplicationStarter(扩展了SpringBootServletInitializer)位于:
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfiguration.class);
return application.sources(WebApplicationStarter.class);
}
我相信应该在具有以下内容的情况下选择我的配置类:
@Configuration
@ComponentScan("com.mickeycorp")
public class SpringConfiguration {
}
显然我误解了一些。.我以为设置ComponentScan会让Spring扫描com.mickeycorp下的软件包以获取组件注释?
最佳答案
我在正确的轨道上..添加@ComponentScan
只是那里的三分之一,而且是正确的,但是它没有将Spring配置为扫描其他类型-它仅涵盖@Component
@Repository
,@Service
或@Controller
批注。我必须在@Entity
和@Repository
中添加以下内容:
@EntityScan("com.mickeycorp.core")
@EnableJpaRepositories("com.mickeycorp.core")
在这种情况下,也不需要重写
SpringApplicationBuilder
,因为SpringConfiguration
类是自动拾取的。参考文献:
Spring Docs: Entity Scan
Spring Docs: EnableJpaRepositories