跨 Java 个包自动装配 Spring 个 Bean
Autowired Spring Beans across Java packages
我正在尝试将我的项目分成三个模块:核心、管理和用户,以便我可以通过核心共享公共代码。问题是我无法 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);
}
我认为应该选择我的配置 class 我有以下内容:
@Configuration
@ComponentScan("com.mickeycorp")
public class SpringConfiguration {
}
显然我误解了什么。我认为设置 ComponentScan 会 Spring 扫描 com.mickeycorp 下的包以获取组件注释?
我走在正确的轨道上.. 添加 @ComponentScan
只是三分之一,而且是正确的,但它没有配置 Spring 来扫描其他类型 - 它只涵盖@Component
@Repository
、@Service
或 @Controller
注释。我必须将以下内容添加到 pickup @Entity
和 @Repository
:
@EntityScan("com.mickeycorp.core")
@EnableJpaRepositories("com.mickeycorp.core")
在这种情况下也不需要覆盖 SpringApplicationBuilder
,因为 SpringConfiguration
class 会自动拾取。
参考文献:
必须使用 @ComponentScan
注释。
Either basePackageClasses()
or basePackages()
(or its alias value()
) may be specified to define specific packages to scan.
@ComponentScan(basePackages={"package1","package2"})
我正在尝试将我的项目分成三个模块:核心、管理和用户,以便我可以通过核心共享公共代码。问题是我无法 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);
}
我认为应该选择我的配置 class 我有以下内容:
@Configuration
@ComponentScan("com.mickeycorp")
public class SpringConfiguration {
}
显然我误解了什么。我认为设置 ComponentScan 会 Spring 扫描 com.mickeycorp 下的包以获取组件注释?
我走在正确的轨道上.. 添加 @ComponentScan
只是三分之一,而且是正确的,但它没有配置 Spring 来扫描其他类型 - 它只涵盖@Component
@Repository
、@Service
或 @Controller
注释。我必须将以下内容添加到 pickup @Entity
和 @Repository
:
@EntityScan("com.mickeycorp.core")
@EnableJpaRepositories("com.mickeycorp.core")
在这种情况下也不需要覆盖 SpringApplicationBuilder
,因为 SpringConfiguration
class 会自动拾取。
参考文献:
@ComponentScan
注释。
Either
basePackageClasses()
orbasePackages()
(or its aliasvalue()
) may be specified to define specific packages to scan.@ComponentScan(basePackages={"package1","package2"})