我正在尝试将项目分为三个模块:核心,管理员和用户,以便我可以通过核心共享通用代码。问题是,当我将所有东西都放在同一包中时,我无法让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

08-28 10:44