如何使用 spring 注释

how to use spring annotations

我有@Controller、@Service 和@Repository classes。 该应用程序运行良好,但我认为我没有正确使用“实体”和“存储库”的注释 classes.

我实际上没有使用数据库(甚至不是内存中的数据库),也不打算使用。

我目前正在使用@Repository 注释存储库,使用@Service 注释实体,这是我的顾虑:我这样做是否正确?

如果我不想持久化数据,我应该如何设计和使用 Spring 注释将实体和存储库 classes 连接到服务?

目前看起来是这样的:

服务class

@Service
public class ServiceClass{
    @Autowired
    RepositoryClass repositoryClass;
    
    public ServiceClass(RepositoryClass repositoryClass) {
        this.repositoryClass = repositoryClass;
    }
}

存储库class

@Repository
public class RepositoryClass{
    @Autowired
    private Entity entity;

    public DocumentRepository(Entity entity) {
        this.entity = entity;
    }
}

实体class

    @Service
    public class Entity {
       private Map<String, List<Integer>> entityMap;

       public Entity (Map<String, List<Integer>> entityMap) {
           this.entityMap = entityMap;
       }
    }

您不能使用来自 data-jpa w/o 的 @Entity 设置一些数据库,因此您的实体不需要任何注释。它们不是您需要在任何地方连接的 bean。

但“当您不知道时”可能是一项服务的一般想法是一个很好的想法。 XD

其他注释正确

您基本上可以使用@Component、@Service、@Config、@Repository 对它们进行注释...这不会破坏您的代码,名称大多只是为了让处理代码的人员更清楚。

@Service 注释实体 class 是错误的。

注解为@Service的class通常是无状态的,因此,这样的class.

通常只有一个对象

注解为@Entity的class通常是有状态的,因此,这种class.

的对象通常很多

示例场景是一个简单的新闻服务:

  • 有一个 NewsService 包含从存储库中获取新闻的有趣代码。
  • 对于每个新闻项目,都有一个 NewsEntity 对象,保存单个新闻项目的数据。

问题是:这里每个class的作用是什么。通常存储库是访问数据的点。实体是数据对象,不是逻辑组件,所以它通常由存储库创建和管理,在这个例子中,不是 Spring.

仅使用该代码很难确定任何内容(没有关于每个组件如何使用的信息),但我会从实体 class 中删除 @Service。其他 classes 可以使用这些注释。