跨Java包的自动装配的Spring Bean

时间:2015-03-26 06:18:37

标签: java spring spring-mvc spring-annotations

我试图将我的项目分成三个模块:核心,管理员和用户,以便我可以通过核心共享公共代码。问题是我无法让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会在com.mickeycorp下通过包进行Spring扫描以获取组件注释吗?

2 个答案:

答案 0 :(得分:3)

我走在正确的轨道上......添加@ComponentScan只是那里的三分之一并且是正确的但它没有配置Spring来扫描其他类型 - 它只涵盖{{1} } @Component@Repository@Service注释。我必须添加以下内容来提取@Controller@Entity

@Repository

在这种情况下,覆盖@EntityScan("com.mickeycorp.core") @EnableJpaRepositories("com.mickeycorp.core") 也是不必要的,因为SpringApplicationBuilder类会自动被选中。

参考文献:

Spring Docs: Entity Scan

Spring Docs: EnableJpaRepositories

答案 1 :(得分:0)

必须使用

//////////////////////////// initial state: textview1 textview2 textview3 button1 button2 --> user pushes button1 new state: textview1 textview3 button1 button2 --> user pushes button2 new state: initial state //////////////////////////// 注释。

请参阅说明

Spring documentation
  

可以指定@ComponentScanbasePackageClasses()(或其别名basePackages())来定义要扫描的特定包。

value()