gpt4 book ai didi

java - 是否可以使用 spring Java @Configuration 避免编译时依赖?

转载 作者:行者123 更新时间:2023-11-29 04:31:24 25 4
gpt4 key购买 nike

有没有一种方法可以使用基于 spring Java 的配置声明 bean 而无需编译时检查,以便我可以在运行时提供接口(interface)实现?

例如,当我编写 JAX-RS 客户端时,我使用 JAX-RS API 而没有引用特定的 API 实现。在我的 spring XML 配置中,我声明了我想要使用的 JAX-RS API 的实际实现,例如Jersey,在设置客户端 bean 时。因为在运行时使用(和验证)基于 XML 的配置,所以我不需要对 Jersey 的编译时依赖性。这让我有一个 <scope>runtime</scope> Maven 对 Jersey 的依赖,而我必须有一个 <scope>compile</scope>对 JAX-RS API 的依赖。这种方法的好处是,如果我不小心使用了该实现,我的应用程序将无法使用 Maven 进行编译。

另一方面,如果我使用基于 Java 的 spring 配置(使用 @Configuration )来声明我的 beans,我必须对 API 的实现具有编译时依赖性,因为配置本身是经过编译的。

如果使用基于 Java 的配置无法实现这一点,是否有任何替代方案(除了使用我知道可能的基于 XML 和 Java 的配置的组合之外)?

最佳答案

简答:

是的,这是可能的:)

长答案:

除了所描述的方法之外,Spring Boot 还提供了开箱即用的方法。

这就是 Spring Boot 实现自动配置魔法的方式。很多选项仅在编译时才在核心 Spring Boot Starter 库中提供。但是当必要的库(或者准确地说是类)在运行时的类路径上可用时,就会积极参与实际的实现。

Spring Boot 为此提供了专门的注解:@ConditionalOnClass。我建议阅读 this section Spring Boots 文档以熟悉该主题。

关于java - 是否可以使用 spring Java @Configuration 避免编译时依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43699325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com