什么时候在 Micronauts 中使用 @Singleton 和 @Prototype 合适?

use*_*055 5 singleton design-patterns kotlin micronaut

我读到了很多关于单例模式的坏事(单例模式有什么不好?),但是,@Singleton在这个 Micronaut 文档中到处都使用它来说明控制反转https://docs.micronaut.io/1.3.0.M2/guide /index.html#ioc

什么时候使用合适@Singleton?例如,如果我有一个UserInfoService具有getUserInfo, createUserInfo,updateUserInfo方法,那么使用 是一个好主意吗@Singleton

另一个单独的问题是我何时使用@Prototype,因为如果我不对函数/类使用任何注释,那么默认情况下它不是原型(就像我在另一个类/函数中启动它的新实例一样)?

Jef*_*own 5

什么时候适合使用@Singleton?例如,如果我有一个 UserInfoService,它具有 getUserInfo、createUserInfo、updateUserInfo 方法,那么使用 @Singleton 是个好主意吗?

UserInfoService几乎可以肯定应该是一个无状态的单身人士。

另一个单独的问题是我什么时候使用@Prototype,因为如果我不对函数/类使用任何注释,那么默认情况下它不是原型吗(就像我在另一个类/函数中启动它的新实例一样) ?

如果您启动一个新实例,则注释并不重要。该注释仅影响 Micronaut 容器为您创建的实例。对于@Singleton容器,创建单个实例并在需要它的所有注入点注入相同的实例。@Prototype容器为每个注入点创建一个新实例。

所有这些更多的是关于应用程序设计,而不是关于 Micronaut。Micronaut 提供了一种简单的机制,供您以声明方式表达(通过@Singleton@Prototype)是否希望共享同一实例,但问题实际上与应用程序设计有关。一般来说,你应该更喜欢无状态的单例。如果由于某种原因您有一个必须是有状态的 bean,并且您有充分的理由不想共享来自不同上下文的实例,那么@Prototype可能是合适的。

我希望这有帮助。