代码之家  ›  专栏  ›  技术社区  ›  user697911

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

  •  1
  • user697911  · 技术社区  · 6 年前

    我有一个春季启动项目。我以“spring”的方式使用它的一些类,这意味着它们由“@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 回复  |  直到 6 年前
        1
  •  1
  •   f-CJ    6 年前

    是的,可以。

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

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

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

    Spring框架附带了一些注释,它们中的每一个都有其用途,但这并不意味着在使用这个框架时,必须用Spring注释来注释所有类。

    当您将类注释为SpringBean时,它们将成为Spring应用程序上下文的一部分,从而使它们可以被@autowired注释注入(Spring框架基于依赖项注入设计模式)。但是Spring注释也有其他的含义,我不能详细介绍它们中的每一个,但是例如,您必须考虑到注释的默认范围,如@bean、@component、@controller、@repository、@service是单例的。因此,每当用这些注释中的一个来注释一个类,而您没有定义一个范围时,您得到的是一个在整个应用程序中共享的单例类。其他范围包括:

    • 独生子女
    • 原型
    • 请求
    • 阶段
    • 应用
    • 网络套接字

    考虑到你的 GenericTree 类,将抽象数据结构类注释为SpringBean是否有意义?大概不会。

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

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