Spring-Boot:在组件之间共享对象

时间:2020-04-19 21:14:54

标签: spring spring-boot

我有一个自定义对象,我想在不同的Spring-Boot组件(例如WebHandler,Authenticator,Filter)之间共享。

也许最简单的方法是在主类中使用静态对象,但这并不是很优雅。

最常用的方法是什么?

2 个答案:

答案 0 :(得分:1)

如果首先拥有共享库,则共享库不应包含任何状态,因为不同的组件可以对其进行更改,并且它应该是线程安全的。 可以通过@Autowired批注在所有组件之间重用它,但是您需要确保它是线程安全的。 Spring bean作用域单例不是线程安全的开箱即用,它取决于您如何编写代码。

您可以用作静态方法,但它取决于您拥有的逻辑以及这些组件是否依赖于另一个对象以及它们是否需要在春季IOC中使用。

答案 1 :(得分:1)

作为容器的春天的全部目的是管理对象。

现在静态变量没有明确定义的生命周期(确切地创建此对象时,在应用程序关闭时由谁处置它,等等)

Speing通过使用依赖注入技术来回答所有这些问题。如果您已经在使用spring,则应将此“共享对象”定义为spring bean(默认情况下,它将具有作用域单例,就像您建议的静态对象一样,但由spring容器进行管理比较好-它会管理对象本身的生命周期)

然后给定必须依赖于该对象的类本身就是bean,则可以注入该bean:

En

除了生命周期管理之外,这种方式还可以对使用共享对象的类进行简单的单元测试(在本例中为“ MyWebHandler”)-现在,您可以创建共享对象的存根/模拟并将其传递到处理程序中-使用静态变量时确实不容易完成的事情

因此,总而言之,如果可以使用spring并将其定义为bean-一定要这样做,如果已经有了依赖项注入容器,则不建议使用statics