在Spring框架中使用非注释类(bean)可以吗?

时间:2018-10-12 23:51:44

标签: spring spring-boot

我有一个spring-boot项目。我正在以“春季”方式使用某些类,这意味着它们由“ @Service”,“ @ Repository”,“ @ Autowired”进行注释。同时,我有很多类,这些类仅以普通的Java方式使用,这意味着没有任何Spring注释,并且它们是以在构造函数中构造对象的标准方式创建的。

例如,未注释的类之一是:

public class GenericTree<T>
{
    private GenericTreeNode<T> root;

    public GenericTree ()
    {
        root = null;
    }

    public GenericTreeNode<T> getRoot ()
    {
        return this.root;
    }

    public void setRoot (GenericTreeNode<T> root)
    {
        this.root = root;
    }
   ...
}

混合使用带有或不带有Spring注释的类是否正常?大概,我可以使用Spring的注释标记将所有非注释类转换为注释类。这真的有益还是有必要?

顺便说一句,我的应用程序的主要逻辑和功能不是以Web为中心的,尽管它们是作为Spring项目创建的。我在Spring中创建的原因是我想为我的界面提供一个Restful服务,以便我可以轻松地在开发中的浏览器中进行测试,其他人可以将其与Restful服务一起使用。

1 个答案:

答案 0 :(得分:1)

是的,可以。

请记住,注释不是Spring专有的。注释是Java 5中引入的,它们只是Java代码的元数据。此元数据可用于:

  • 编译时间
  • 建立时间
  • 运行时

您甚至可以创建自己的自定义注释,并使用它们注释代码。

Spring框架带有一些注释,每个注释都有其用途,但这并不意味着您在使用此框架时必须使用Spring注释对所有类进行注释。

当您将类注释为Spring Bean时,它们将成为Spring Application Context的一部分,从而使它们可通过@Autowired注释进行注入(Spring框架基于依赖项注入设计模式)。但是Spring注释也具有其他含义,我无法详细介绍每个注释的细节,但是例如,您必须考虑到@ Bean,@ Component,@ Controller,@ Repository,@ Service等注释的默认范围是Singleton 。因此,每当您使用这些注释之一对一个类进行注释而没有定义范围时,您将获得的是在应用程序中共享的单例类。其他范围是:

  • 单人
  • 原型
  • 请求
  • 会话
  • 应用程序
  • websocket

考虑到您的GenericTree类,将抽象数据结构类注释为Spring Bean是否有意义?可能不是。

是的,当您基于Spring框架开发应用程序时,通常的事情是混合使用Spring注释类和常规POJO。

我建议您阅读Spring框架文档,了解什么是依赖注入,以及最常用的Spring注释的用途和含义。