我试图将我的项目分成三个模块:核心,管理员和用户,以便我可以通过核心共享公共代码。问题是我无法让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扫描以获取组件注释吗?
答案 0 :(得分:3)
我走在正确的轨道上......添加@ComponentScan
只是那里的三分之一并且是正确的但它没有配置Spring来扫描其他类型 - 它只涵盖{{1} } @Component
,@Repository
或@Service
注释。我必须添加以下内容来提取@Controller
和@Entity
:
@Repository
在这种情况下,覆盖@EntityScan("com.mickeycorp.core")
@EnableJpaRepositories("com.mickeycorp.core")
也是不必要的,因为SpringApplicationBuilder
类会自动被选中。
参考文献:
答案 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可以指定
@ComponentScan
或basePackageClasses()
(或其别名basePackages()
)来定义要扫描的特定包。value()