是否应该通过jar库配置或客户端war应用程序配置来实例化jar库中定义的服务bean?

时间:2015-10-21 11:59:43

标签: java spring

我有一个库作为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中,一个在战争中)在同一个包中具有相同的类名怎么办?

1 个答案:

答案 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是以前用于组件扫描的类

希望有所帮助