我有一个库作为jar包装Maven项目,提供服务。
用于实例化服务bean的@Configuration类:
@Configuration
public class JpaService {
@Bean
public UserRoleServiceImpl userRoleService() {
return new UserRoleServiceImpl();
}
@Bean
public UserServiceImpl userService() {
return new UserServiceImpl();
}
}
我估计我需要在jar存档之外进行bean实例化。
所以我在项目的测试部分有一个这个类的副本,另一个是使用该库的另一个war包装Maven项目的副本。
但是如果我在jar库中实例化了这些服务呢?我只需要做一次,无论是测试还是使用它的所有客户端项目。
更新:两个问题......
所有组件扫描是否只能从战争中完成?或者是否应该从jar中扫描jar服务组件?
如果两个组件(一个在jar中,一个在战争中)在同一个包中具有相同的类名怎么办?
答案 0 :(得分:1)
我不认为我完全理解您的问题,但是如果您的目标是将bean添加到jar之外的应用程序上下文中,那么您需要做的是使用@ComponentScan注释,并指定要扫描的包,包可以在不同的jar中,唯一需要的是你要用@ Service,@ Componenet甚至@Configuration
来包含你想要包含的clases示例:
@Configuration
@ComponentScan(basePackages={"com.somepackacge.controller",
...
你可以包含任意数量的包。
顺便说一下,不要将你的clases从一个地方复制到另一个地方,这样做会让人很难过,如果你想在你的测试中包含你的配置,你可以随时做到:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyConfigClass.class)
MyConfigClass是以前用于组件扫描的类
希望有所帮助