广告案例的网站,网站动画效果怎么做的,做网站用什么软件初二,如何建立免费的个人企业网站随着项目的复杂度的增加#xff0c;我们通常会在一个业务类中注入其他过多的业务类。从而使当前的业务层扩充成一个大而全的功能模块。那么就容易出现一下问题
字段注入会让依赖关系变得不那么明显#xff0c;因为你无法通过构造函数看到所有的依赖项。使用构造函数时#… 随着项目的复杂度的增加我们通常会在一个业务类中注入其他过多的业务类。从而使当前的业务层扩充成一个大而全的功能模块。那么就容易出现一下问题
字段注入会让依赖关系变得不那么明显因为你无法通过构造函数看到所有的依赖项。使用构造函数时所有必需的组件都会在方法签名中列出使得依赖关系更加清晰。如果 Autowired 注解的字段没有注入成功且后续使用时没有进行空值检查可能会导致空指针异常NullPointerException。构造函数注入可以确保所有必须依赖项在对象构造时被提供当未能注入时构造过程将失败并抛出异常。使用字段注入可能导致循环依赖问题尤其是在两个或多个 beans 互相依赖时。Spring 容器可以通过 setter 注入来解决循环依赖但构造函数注入则不可以。字段注入会隐藏依赖的生命周期管理特性。当需要进行作用域如单例、原型等的特定管理时构造函数注入更直观且不容易出现意外的作用域问题。 尽管字段注入是一种简单的方法可以快速快速获得依赖但它并不是最佳实践。为了确保代码的可维护性、可测试性和清晰性推荐使用构造函数注入和方法注入。通过这种方式你可以明确依赖关系避免潜在的问题并提升代码的质量和可读性。 使用字段注入
Slf4j
Service
Transactional
public class StockService {Autowiredprivate MaterialService materialService;Autowiredprivate StorageLocationService storageLocationService;Autowiredprivate StorageStockService storageStockService;Autowiredprivate StorageStockMovementsService storageStockMovementsService;Autowiredprivate StorageInboundService storageInboundService;Autowiredprivate StorageInboundMaterialService storageInboundMaterialService;
} StockService 是专门的服务组合将多个业务服务提取到一个类中管理它们的交互。避免违反了单一职责原则 使用构造器推荐
Slf4j
Service
Transactional
public class StockService {private final MaterialService materialService;private final StorageLocationService storageLocationService;private final StorageStockService storageStockService;private final StorageStockMovementsService storageStockMovementsService;private final StorageInboundService storageInboundService;private final StorageInboundMaterialService storageInboundMaterialService;public StockService(MaterialService materialService, StorageLocationService storageLocationService, StorageStockService storageStockService, StorageStockMovementsService storageStockMovementsService, StorageInboundService storageInboundService, StorageInboundMaterialService storageInboundMaterialService) {this.materialService materialService;this.storageLocationService storageLocationService;this.storageStockService storageStockService;this.storageStockMovementsService storageStockMovementsService;this.storageInboundService storageInboundService;this.storageInboundMaterialService storageInboundMaterialService;}
} 有助于提高类的可测试性。如果项目使用了 Lombok可以考虑使用 Autowired 和 AllArgsConstructor 来减少样板代码。
Slf4j
Service
Transactional
AllArgsConstructor(onConstructor __(Autowired))
public class StockService {private final MaterialService materialService;private final StorageLocationService storageLocationService;private final StorageStockService storageStockService;private final StorageStockMovementsService storageStockMovementsService;private final StorageInboundService storageInboundService;private final StorageInboundMaterialService storageInboundMaterialService;
}