如何知道何时使用组件注解以及何时在 Spring Boot 中手动初始化 类?

How to know when to use component annotations and when to initialize classes manually in Spring Boot?

我正在学习Spring Boot 并且有一个相当理论性的问题。在这个 Udacity Example 模型 class 是手动启动的:

ChatMessage newMessage = new ChatMessage();

这是好的做法吗?

我会进一步详细说明这一点。假设我有一个 DateUtil class 进行一些日期转换,我应该使用 @Component 注释注册它还是自己管理它的依赖项 (DateUtil dateUtil = new DateUtil())?

所以 主要总结问题:如何知道何时使用组件注释以及何时手动初始化 classes?

非常感谢!!!

据我所知,当您使用@Component 创建class(我喜欢使用@Service)时,Spring 将在IoC 中创建bean。然后您可以通过@Autowired 使用该 bean,使用 @Component 您只创建一个实例,该实例将在整个应用程序中共享。当你使用 'new' 方法创建对象时,你自己创建了对象。在 bean 范围文档中查看更多信息。

第一个问题的答案是,是的,它仍然可以,因为 bean 被假定为单调,尽管并非总是如此。在这种情况下,将 ChatMessage class 标记为 bean 是没有意义的,因为此 class 的实例将被创建多次,如果它们都是 beans 将获得什么好处是完全不清楚的并且位于应用程序上下文中。

第二个问题的答案:我认为 DateUtil class 应该以通常的方式实例化,因为它看起来像一个像 StringUtils 这样的常规实用程序 class。也许您应该将其方法设为静态,这样您就根本不必实例化它。但是,如果这是一个包含业务逻辑的复杂 class 和/或在应用程序启动时使用从应用程序外部接收到的一些数据进行初始化,并且此 class 的对象用于其他 class es 的应用程序,那么可能值得将它变成一个 bean。

第三个问题的答案:很难给出明确的答案。当您想要实现控制反转而不依赖于您正在注入的 class 时,Bean 值得创建。将 class 声明为组件以便其实例成为 beans 必须有意义,为应用程序的设计带来优势。

您需要使用 Spring 应用程序才能了解何时制作 bean。查看一些著名的 Spring 应用程序,了解在哪些情况下以及哪些 class 实例被 beaned。