在另一个 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(组件)的方法是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章