【问题标题】:How to autowire @service from external Jar in Spring如何在 Spring 中从外部 Jar 自动装配 @service
【发布时间】:2014-12-14 13:58:07
【问题描述】:

我正在使用 Maven 完全基于 Java 配置开发两个基于 spring 的应用程序(Ex app1 和 app2),并且没有 XML 配置。 通过 Maven -WAR 插件,我创建了 app2 的 Jar 引用,并使用 mvn install:install file 将 app2 jar 与 app1 绑定。 app2 - 它用于从数据源获取信息。

我已在 app1 实现类中自动装配 app2 服务以获取在 app2 应用程序中使用 @Service 注释的详细信息。

我的第一个疑问是:

app1 和 app2 都有单独的 AppConfig.java 文件。是否可以简单地自动装配以 Jar 格式提供的 @Service 之一,否则我需要将 App2 的 AppConfig java 文件定义或导入到 App1 的 AppConfig.jave 文件中.

我已尝试使用简单的自动装配外部 JAR @Service 类并以错误结束。

请帮助我将外部 Jar 的 @Service 自动连接到 实现类。

下面是我的 App1 存储库类

@Repository
public class VehicleRepository {   

    @Autowired  
    VehicleService vehicleservice;   

    public Map<String, item> getAllTypes(String type) {     

            Vehicke vehicle = vehicleservice.getAllVehicle(type);

            // handle response here...
        } catch (Exception ex) {

            // handle exception here
        } finally {

        }
        return vehicleDetails;
    }

}

VehicleService 在外部 Jar 中可用。

VehicleService 类:

@Service
public class VehicleService {

    public VehicleService() {
    }

    @Autowired
    PortRepository portRepository;

    @Autowired
    MessageSource messageSource;


    public Vehicle getAllVehicles(String type) {
        List<Vehicle> cehicles = portRepository.getPorts();
        return vehicle;
    }

【问题讨论】:

  • Beans 由配置类定义。如果 Spring 没有使用其中一个配置类进行初始化,那么显然由该配置类定义的 bean 对于 Spring 来说是未知的。
  • @JBNizet 有没有办法在存储库类中的自动装配服务之前调用 App2 的配置或如何将 App2 的 AppConfig 文件调用/包含到 App1 的 Appcofig 中
  • 通过从 App1 的配置类中导入 App2 的配置类:docs.spring.io/spring/docs/current/javadoc-api/org/…。但是,如果这些真的是设计为独立运行的应用程序,那么您肯定会遇到冲突的 bean。您可能必须编写一个单独的配置类来仅从 App2 加载在用作 App1 的一部分时有意义的 bean。

标签: spring service jar autowired maven-war-plugin


【解决方案1】:

让我们让它变得简单。
您的 App1 依赖于 App2。
所以你使用 @Import(App2Config.class) class App1Config {},就是这样。

顺便说一句,你可以使用父 pom.xml 和模块 app1 和 app2,而不是使用 'mvn install:install file' 的技巧,并声明模块 app1 对模块 app2 的依赖关系pom.xml 部分。然后运行“mvn install”来构建你的项目。
在此处查看示例:http://books.sonatype.com/mvnex-book/reference/multimodule.html

【讨论】:

  • 当我使用导入另一个应用程序配置并创建部署在 Tomcat 中的 WAR 但我得到以下错误“原因:java.lang.IllegalArgumentException: 无法注册名称为 'dispatcher' 的 servlet。检查是否有是另一个以相同名称注册的 servlet。”
  • 还有一个疑问。导入是否简单,或者我需要自动装配并将 App2 配置中可用的定义定义到 App1 配置中
  • 关于第一条评论:您应该只有一个 web.xml 文件,在该文件中您只定义了一个具有给定名称的 servlet。关于第二条评论:@Import 使您的 App1Config 包含 App2Config 中定义的所有 bean,就好像它们在那里定义一样。
猜你喜欢
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多