大家好我是易安,本篇文章我将向你展现如何应用Lombok来实现Spring框架中的最佳实际。

Spring框架自身提供了各种不同的办法来执行依赖注入。选项的灵活性是Spring框架的劣势之一。然而,并非所有的依赖注入选项都被认为是最佳实际。有些选项实际上十分蹩脚。

依赖注入示例

我设置了一些示例,以便咱们审查能够应用的不同依赖注入选项。

让咱们应用一个示例Spring服务。对于咱们的目标,该服务具备返回字符串的一个办法。咱们将应用Spring将咱们的“服务”注入到一些伪控制器中。请记住,咱们只是摸索如何应用Spring框架进行依赖注入。

示例服务

@Servicepublic class MyService {public String getHello(){    return "Hello"; }}

咱们的字段控制器有一个公共属性来保留该服务。咱们能够正文此字段,Spring将注入服务实例。

属性注入

@Controllerpublic class FieldController {@AutowiredMyService myService;public String saySomething(){    return myService.getHello(); }}

这只是一个公共属性,没有setter。很显著,这不是一个好习惯。也不是举荐的办法。

咱们能够略微改良一下,使字段拜访变为公有的。Spring框架容许您主动拆卸公有字段。你的确会看到有人这样做。Spring会执行一些反射操作来实现依赖注入。

私有化

@Controllerpublic class PrivateFieldController {@Autowiredprivate MyService myService;public String saySomething(){    return myService.getHello(); }}

尽管比仅应用公有字段好,但测试会变得麻烦。您要么须要启动Spring上下文,要么应用一些Spring实用程序来执行测试的依赖注入。尽管不是世界末日,但通常很烦人。

咱们能够通过为公有属性提供setter办法来改良这一点。在面向对象编程中,Getter和Setter通常被视为最佳实际。通过对setter办法进行正文,能够轻松地批示Spring应用setter进行依赖注入。

办法注入

Setter控制器

@Controllerpublic class SetterController {private MyService myService;@Autowiredpublic void setMyService(MyService myService) {    this.myService = myService;}public String saySomething(){    return myService.getHello(); }}

这比应用公有字段要好得多。有人会埋怨这是要写太多代码了

依赖注入最佳实际

依赖注入的最佳实际是利用接口、构造函数和 final 属性。

我曾经设置了一个“最佳实际”服务接口,并提供了一个带有 Spring Service 正文的服务实现。

最佳实际服务接口

public interface BpService {    String getHello();}

最佳实际服务实现

@Servicepublic class BpServiceImpl implements BpService {    @Override    public String getHello() {        return "The Best Hello!";    }}

应用 Project Lombok

当初,应用 Lombok 实现依赖注入的最佳实际,咱们须要:

  • 申明一个接口类型的 final 属性
  • 应用 Project Lombok 的 @RequiredArgsConstructor 正文标注类

当初,Project Lombok 将为所有申明为 final 的属性生成构造函数。Spring 将主动应用 Lombok 提供的构造函数进行主动拆卸。

Lombok 控制器

@RequiredArgsConstructor@Controllerpublic class BpFinalConstructorController {    private final BpService bpService;    public String saySomething(){        return bpService.getHello();    }}

这是一种十分不错的形式。您的代码会放弃十分洁净。在应用 Spring 时,通常须要多个主动拆卸的属性。

当您须要增加另一个 bean 时,只需申明一个 final 属性即可。

如果您进行了重构,不再须要一个由 Spring 治理的依赖项,只需删除 final 属性即可。

您不再须要保护 setter 或构造函数代码。Lombok 为您解决这个干燥的工作。

我在日常编码中曾经应用这种技术一段时间了。它的确节俭了很多工夫,并使代码更加清晰。不再存在未应用的属性和未应用的结构函数参数。当初重构就少了一些苦楚!

本文由mdnice多平台公布