Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jar库中定义的服务bean应该由jar库配置或客户端war应用程序配置实例化吗?_Java_Spring - Fatal编程技术网

Java jar库中定义的服务bean应该由jar库配置或客户端war应用程序配置实例化吗?

Java jar库中定义的服务bean应该由jar库配置或客户端war应用程序配置实例化吗?,java,spring,Java,Spring,我有一个作为jar打包的Maven项目的库,它提供服务 实例化服务bean的@Configuration类: @Configuration public class JpaService { @Bean public UserRoleServiceImpl userRoleService() { return new UserRoleServiceImpl(); } @Bean public UserServiceImpl userService() {

我有一个作为jar打包的Maven项目的库,它提供服务

实例化服务bean的@Configuration类:

@Configuration
public class JpaService {

  @Bean
  public UserRoleServiceImpl userRoleService() {
    return new UserRoleServiceImpl();
  }

  @Bean
  public UserServiceImpl userService() {
    return new UserServiceImpl();
  }

}
我认为我需要将bean实例化放在jar归档之外

因此,我在项目的测试部分有一个此类的副本,在另一个使用该库的war-packaging-Maven项目中有另一个副本

但是如果我在jar库本身中实例化服务呢。我只需要做一次,无论是测试还是所有使用它的客户项目

更新:两个问题


所有的组件扫描应该只在战争中进行吗?还是应该从jar扫描jar服务组件


如果两个组件(一个在jar中,一个在war中)在同一个包中具有相同的类名,该怎么办?

我想我不完全理解您的问题,但是如果您打算将bean添加到jar之外的应用程序上下文中,那么您需要做的是使用@ComponentScan注释,并指定要扫描的包,该包可以位于不同的jar中,唯一需要做的是使用@Service、@Componenet甚至@Configuration指定要包含的类

例如:

@Configuration
@ComponentScan(basePackages={"com.somepackacge.controller",

您可以包含任意数量的软件包

顺便说一句,不要把你的分类从一个地方复制到另一个地方,维护这将是未来的一个头疼的问题,如果你想在测试中包括你的配置,你可以:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyConfigClass.class)
其中MyConfigClass是组件扫描之前使用的类u


希望它能有所帮助

jar库中定义的服务bean是由jar库配置实例化还是由客户端war应用程序配置实例化?您可能希望每个bean都由spring实例化,以便在应用程序上下文中都可以访问。如果你尊重相同的软件包,战争或jar其实并不重要。当spring加载时,它将扫描这些包。因此,如果您的spring配置在war中(您是),spring将扫描JAR的包(如果由扫描注释指定),那么所有组件扫描是否应该仅从war中完成?或者应该从jar扫描jar服务组件?如果它们在同一个类路径中,那么在运行时应该有冲突问题。(我认为它会加载其中一个,而忽略另一个。不确定)我可以想象的唯一方法是使用两个独立的类加载程序,我不会这样做,尽管我认为你可以,但请想象一下这将如何与spring配合得很好。请记住,java中没有本机的模块,所以您可能希望避免使用相同的包和相同的类名。如果您仍然想这样做,那么您可以做一些事情来编辑清单文件。看看拼图。甚至还有OSGi