0

我可以从 spring boot 中的依赖模块调用父模块中的类吗?假设我有一个项目 A springboot 应用程序,项目 B 是依赖项(公共模块)。我能够自动装配并使用 A 中的 B 类。但反之亦然。B 是依赖项,因此没有配置 yml 也没有给出版本。当我尝试说 Autowire aclass 时,它给了我 nulll。

4

3 回答 3

0

如果您的意思是 A 具有来自 B 的接口的实现,并且您在模块 B 中定义了接口,那么 spring 可以在 B 中包含的组件中自动装配来自 A 的实现:

//contained in A
@Component
class BookRetrievalServiceImpl implements BookRetrievalService {

    @Override
    findBookById(String id){
        //TODO do something
    }
}

//contained in B
interface BookRetrievalService {
    Book findBookById(String id);
}

//contained in B
@Component
class BookBillingService {
  private BookRetrievalService bookRetrievalService;

  // BookRetrievalServiceImpl gets autowired here. 
  public BookBillingService(BookRetrievalService bookRetrievalService){
   this.bookRetrievalService = bookRetrievalService;
  }

  public void calculateBilling(String bookId){
      //TODO retrieve book and calculate...
  }
}
于 2021-06-10T14:03:12.540 回答
0

您可以使用 Spring bean 配置:

例如,您有一个BClass来自您的项目B(不是 Spring Boot 项目)的类,并且您需要注入BClass您的 Spring Boot 项目A,您创建一个 Spring 配置类/

@Configuration
public class AConfiguration {

   @Bean
   public BClass configureBClass() {
       return new BClass();
   }

}

然后你可以注入BClass你的 Spring boot 项目:

@Autowired
BClass bClass;

不要忘记将项目 B 添加为依赖项,您应该AConfiguration在 Spring boot 主包下创建类。

于 2021-06-10T13:47:36.573 回答
0

如果我理解您的问题,您有两个项目 A 和 B,其中 A 依赖于 B。从技术上讲,A 具有 B 的 maven 依赖项,因此 A 可以访问 B 的所有类。但是如果您看到,B 不知道关于 A. 想像你在 POM 中添加一个 Spring 工件来使用它的类,但这是否意味着 Spring Artifact 也可以访问你的类,不,对吗?

另一件事,你说B是一种通用模块,现在如果你让B依赖A,它可能不会保持通用。

由于您没有提供任何具体细节,我可以建议您尝试使用 Spring Events。使用 Spring Events,两个兄弟姐妹可以交互而无需相互依赖。请参阅此处说明 Spring Boot 应用程序事件

于 2021-06-10T14:16:17.127 回答