在另一个 bean 中使用来自一个 bean(组件)的方法是不是正确?

Posted

技术标签:

【中文标题】在另一个 bean 中使用来自一个 bean(组件)的方法是不是正确?【英文标题】:Is it right to use methods from one bean (component) in another bean?在另一个 bean 中使用来自一个 bean(组件)的方法是否正确? 【发布时间】:2020-02-21 12:51:47 【问题描述】:

主要是关于应用程序架构的问题。

我们有服务层 (@Service HelloService) 和 bean,它们使用服务方法 (@Component HelloBean,带有自动装配的 HelloService)。服务中有许多方法,HelloBean 将服务中的许多方法聚合在一个方法中。所以我们使用这个单一的方法。

我们还有另一个 bean (@Component GoodbyeBean)。我们想使用 HelloBean 中的单个方法,并且应该在 GoodbyeBean 中自动装配 HelloBean 以使用此方法。

在另一个中使用一个 bean 是否正确,或者我们应该创建一些新服务(例如,@Service GoodbyeService)并重复 HelloService 中的所有代码?或者我们应该在 GoodbyeBean 中自动装配 HelloService 并重复 HelloBean 中的所有代码?

我意识到,Spring IoC 包含所有这些组件,我们可以在 Spring 上下文中使用所有这些组件。

什么是正确的方法?

【问题讨论】:

【参考方案1】:

我认为你不应该在 GoodByeBean 中调用 HelloBean,因为顾名思义,它是相互对立的,并且会误导任何其他人。

如果 HelloBean 和 GoodbyeBean 中有一些公共代码,将其移至新服务可能会调用 GreetingService,然后从 HelloBean 和 GoodbyeBean 调用该方法

【讨论】:

感谢您的回答。我认为您答案的第二部分更适用【参考方案2】:

如果您正在调用 HelloBean 的方法,该方法调用了 HelloService 的多个方法,那么最好从 GoodByeBean 调用这些方法,或者更确切地说,如果没有更改代码或其他任何内容,则使用 HelloBean 并调用相同的方法。

如果是其他方法没有调用我们之前考虑的方法,那么我想从 GoodByeBean 调用 HelloBean 的方法是可以的。有时可能需要从同一个逻辑层调用方法。

或者按照@Ankita Agrawal 的建议,将方法复制到另一个类中,然后从 HelloBean 和 GoodByeBean 中调用该方法。

【讨论】:

那么最好从 GoodByeBean 调用这些方法 - 是否违反 DRY(不要重复自己)规则?

以上是关于在另一个 bean 中使用来自一个 bean(组件)的方法是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

在另一个托管 bean 中获取托管 bean 引用

如何使用已经在另一个 .xml 文件中配置的 bean?

Spring Boot:来自库项目的自动装配 bean

我有2个服务类,它们都使用自动装配的bean扩展相同的父类,我可以在一个类中使用bean但在另一个类中不使用[重复]

从支持 bean 访问 JSF 组件标记属性值

一个组件需要一个名为“dataSource”的 bean,但找不到该 bean