关于后端:使用-Spring-进行依赖注入的最佳实践

33次阅读

共计 2041 个字符,预计需要花费 6 分钟才能阅读完成。

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

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

依赖注入示例

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

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

示例服务

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

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

属性注入

@Controller
public class FieldController {
@Autowired

MyService myService;

public String saySomething(){return myService.getHello();

 }
}

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

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

私有化

@Controller
public class PrivateFieldController {
@Autowired

private MyService myService;

public String saySomething(){return myService.getHello();

 }
}

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

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

办法注入

Setter 控制器

@Controller

public class SetterController {
private MyService myService;

@Autowired

public void setMyService(MyService myService) {this.myService = myService;}

public String saySomething(){return myService.getHello();

 }
}

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

依赖注入最佳实际

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

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

最佳实际服务接口

public interface BpService {String getHello();
}

最佳实际服务实现

@Service
public 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
@Controller
public class BpFinalConstructorController {

    private final BpService bpService;

    public String saySomething(){return bpService.getHello();
    }
}

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

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

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

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

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

本文由 mdnice 多平台公布

正文完
 0