我可以从 spring boot 中的依赖模块调用父模块中的类吗?假设我有一个项目 A springboot 应用程序,项目 B 是依赖项(公共模块)。我能够自动装配并使用 A 中的 B 类。但反之亦然。B 是依赖项,因此没有配置 yml 也没有给出版本。当我尝试说 Autowire aclass 时,它给了我 nulll。
3 回答
如果您的意思是 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...
}
}
您可以使用 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 主包下创建类。
如果我理解您的问题,您有两个项目 A 和 B,其中 A 依赖于 B。从技术上讲,A 具有 B 的 maven 依赖项,因此 A 可以访问 B 的所有类。但是如果您看到,B 不知道关于 A. 想像你在 POM 中添加一个 Spring 工件来使用它的类,但这是否意味着 Spring Artifact 也可以访问你的类,不,对吗?
另一件事,你说B是一种通用模块,现在如果你让B依赖A,它可能不会保持通用。
由于您没有提供任何具体细节,我可以建议您尝试使用 Spring Events。使用 Spring Events,两个兄弟姐妹可以交互而无需相互依赖。请参阅此处说明 Spring Boot 应用程序事件