java—我可以在不与@service进行数据交互的情况下注解类吗?

vddsk6oq  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(382)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

上个月关门了。
改进这个问题
我有一个springboot应用程序,它执行etl进程,而不是web应用程序。我知道使用服务是为了分离关注点并提供松散耦合,但是我可以将它用于不处理正在处理的数据的类。我在我的服务包中放了几个类,并用@service对它们进行了注解,例如:
S3服务.java

@Service
public class S3Service {

    @Autowired
    private final AmazonS3 s3Client;

    public File downloadFile(String filename) throws Exception {
        ...
    }

    public File uploadFile(String filename) throws Exception {
        ...
    }

}

文件安全服务.java

@Service
public FileSecurityService {

    public File decryptFile(String filename) throws Exception {
        ...
    }

    public File encryptFile(String filename) throws Exception {
        ...
    }

}

我这样做是因为我认为它使我的代码更干净,但我不认为这是服务的目的。我很犹豫是否要让它们成为实用类,因为它们是过程中的一个重要部分。这样使用@service是一种不好的做法吗?如果是,我应该把这些放在哪里?谢谢您。

xu3bshqb

xu3bshqb1#

那件事 @Service 现在(您对它进行了注解),您可以通过构造函数将它注入到其他不同的组件/bean/服务中(springboot会注意找到它们并正确地自动连接)。
例如,你可以做:

@Service
public class S3Service {

      private final AmazonS3 s3Client;

      public S3Service(AmazonS3 s3Client) {
            this.s3Client = s3Client;
      }

}

Spring会小心地寻找 s3Client 当需要创建 S3Service 服务。
现在为了测试 S3Service -你可以提供一个 @Configuration 哪里 s3Client 是一种嘲弄;因此,测试这是超级方便。人们都想忘记Spring是多么的容易。
什么是 @Service 与否无关紧要——这取决于你和你的团队。我们的一堆“实用程序”都是服务,因为以这种方式处理它们要容易得多。

ghhkc1vu

ghhkc1vu2#

有不同类型的服务,这取决于您如何构造应用程序。Spring,注解 @Service 以及 @Repository 受域驱动设计的启发,其中存在几种类型的服务:应用程序服务、域服务、基础设施服务。。。你可以自由使用 @Service 上面的注解。
您还可以为每种类型的服务获取更具体的注解并创建自定义注解: @InfrastructureService , @ApplicationService , @DomainService . 如果你选择用 @Service 从spring开始,spring将为每个带有此注解的类创建一个bean。
例如:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Service
public @interface ApplicationService {
}
wkftcu5l

wkftcu5l3#

我这样做是因为我认为它使我的代码更干净,但我不认为这是服务的目的。->是的。它使代码更清晰,但这是一个足够好的论点吗?spring的开发不仅仅是为了让应用程序代码看起来更干净。
我很犹豫是否要让它们成为实用类,因为它们是过程中的一个重要部分。->这是一个不让它成为实用类的好理由吗?仅仅因为它是一个大类或者你有太多的方法?我不这么认为。
这样使用@service是一种不好的做法吗?->在我看来,仅仅为了更干净的代码而创建bean对于创建bean和使用spring框架来说是不够的。
当您的代码库很大,有许多包,甚至更多的类时,有时读者/审阅者很难找出特定类的示例在应用程序上下文中的来源。这就是人们创建java类并在配置类中创建bean的原因。因此,只有少数几个配置类创建了所有bean并将其注入到应用程序上下文中。
接下来是您的问题->您应该创建一个bean还是应该创建一个带有final关键字和静态方法的实用程序类。在我看来,您应该采用后一种方法,一般来说,您应该始终考虑到spring框架开发所围绕的思想体系。

相关问题