关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。
上个月关门了。
改进这个问题
我有一个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是一种不好的做法吗?如果是,我应该把这些放在哪里?谢谢您。
3条答案
按热度按时间xu3bshqb1#
那件事
@Service
现在(您对它进行了注解),您可以通过构造函数将它注入到其他不同的组件/bean/服务中(springboot会注意找到它们并正确地自动连接)。例如,你可以做:
Spring会小心地寻找
s3Client
当需要创建S3Service
服务。现在为了测试
S3Service
-你可以提供一个@Configuration
哪里s3Client
是一种嘲弄;因此,测试这是超级方便。人们都想忘记Spring是多么的容易。什么是
@Service
与否无关紧要——这取决于你和你的团队。我们的一堆“实用程序”都是服务,因为以这种方式处理它们要容易得多。ghhkc1vu2#
有不同类型的服务,这取决于您如何构造应用程序。Spring,注解
@Service
以及@Repository
受域驱动设计的启发,其中存在几种类型的服务:应用程序服务、域服务、基础设施服务。。。你可以自由使用@Service
上面的注解。您还可以为每种类型的服务获取更具体的注解并创建自定义注解:
@InfrastructureService
,@ApplicationService
,@DomainService
. 如果你选择用@Service
从spring开始,spring将为每个带有此注解的类创建一个bean。例如:
wkftcu5l3#
我这样做是因为我认为它使我的代码更干净,但我不认为这是服务的目的。->是的。它使代码更清晰,但这是一个足够好的论点吗?spring的开发不仅仅是为了让应用程序代码看起来更干净。
我很犹豫是否要让它们成为实用类,因为它们是过程中的一个重要部分。->这是一个不让它成为实用类的好理由吗?仅仅因为它是一个大类或者你有太多的方法?我不这么认为。
这样使用@service是一种不好的做法吗?->在我看来,仅仅为了更干净的代码而创建bean对于创建bean和使用spring框架来说是不够的。
当您的代码库很大,有许多包,甚至更多的类时,有时读者/审阅者很难找出特定类的示例在应用程序上下文中的来源。这就是人们创建java类并在配置类中创建bean的原因。因此,只有少数几个配置类创建了所有bean并将其注入到应用程序上下文中。
接下来是您的问题->您应该创建一个bean还是应该创建一个带有final关键字和静态方法的实用程序类。在我看来,您应该采用后一种方法,一般来说,您应该始终考虑到spring框架开发所围绕的思想体系。