温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用Spring 如何实现注入依赖

发布时间:2020-11-18 14:56:24 来源:亿速云 阅读:160 作者:Leah 栏目:开发技术

这篇文章将为大家详细讲解有关使用Spring 如何实现注入依赖,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

示例 Service

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

我们的 Field 拥有一项公有属性的服务。我们可以注解该字段,Spring 将注入该服务的实例。

属性注入

Field Controller

@Controller
public class FieldController {
  @Autowired
  MyService myService;
  public String saySomething(){
    return myService.getHello();
  }
}

这只是一个公有属性,没有 setter。显然,这不是一个好的实践,不推荐这样做。
我们可以对此进行一些改进,将该字段的访问权限设为私有。Spring Framework 确实允许你自动装配私有字段。你确实看到有人这样做。Spring 将执行一些反射魔术来执行依赖项注入

私有 Field Controller

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

尽管只使用私有字段比较好,但是测试却成了一个令人头痛。你要么需要启动 Spring Context,要么使用一些 Spring 实用程序来执行依赖注入以进行测试。不是世界末日,但总的来说很烦人。
我们可以通过为私有属性提供 setter 来改善这一点。Getter 和 Setter 通常被认为是面向对象编程中的最佳实践。通过注解 setter 方法,指示 Spring 使用 setter 进行依赖项注入很简单。

方法注入

Setter Controller

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

这是使用私有字段时的明显改进。有人会抱怨这要写太多代码。但是实际上,自 South Park 的第一季以来,此类任务已在现代 IDE 中实现了自动化。

构造函数注入

下一个选项是使用构造函数。到目前为止,这是我们研究过的最佳方法。 使用构造函数设置注入的属性时,不必提供自动装配注释。这是一个很好的功能,可以节省一些键入时间。从 Spring Framework 版本4.2开始,用于依赖项注入的构造函数的注释是可选的。

Constructor Controller

@Controller
public class ConstructorController {
  private MyService myService;
  public ConstructorController(MyService myService) {
    this.myService = myService;
  }
  public String saySomething(){
    return myService.getHello();
  }
}

基于构造函数的依赖注入无疑被认为是最佳实践。曾经有一段时间我个人偏爱基于 setter 的注入,但是后来又转向基于构造函数的注入。
我们仍然可以改善我们的示例。现在有两个主要问题。 第一,我们的服务类型是具体类型。硬类型的依赖注入不是最佳实践。
第二个问题是,我们要注入的属性未声明为final。因此,从理论上讲,该类可以在实例化注入的属性后对其进行修改。依# 赖注入最佳实践
依赖项注入的最佳实践是利用接口,构造函数和 final 属性。
我已经设置了“最佳实践”服务接口,并提供了服务实现---使用了 Spring Service 注解。

最佳实践服务接口

public interface BpService {
  String getHello();
}

最佳实践服务实现

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

使用 Project Lombok

现在,使用 Project Lombok 进行依赖注入的最佳实践的秘诀在于:

  • 声明一个 final 属性接口
  • 为类添加 Project Lomboc 注解 @RequiredArgsConstructor

现在,Project Lombok 将为声明为 final 的所有属性生成一个构造函数。Spring 会自动使用 Lombok 提供的构造函数来自动装配该片段。

Lombok Controller

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

这是执行此操作的真正好方法。您的代码保持非常干净。使用 Spring时,通常需要多个自动装配属性。
当您需要添加另一个 bean 时,只需声明一个 final 属性。
如果您重构并且不再需要 Spring 托管的依赖项,则只需删除 final 属性。
你不再需要维护设置器或构造函数代码。Project Lombok 减轻了您的日常工作。
我在日常编码中一直使用这种技术。绝对是节省时间。并导致更干净的代码。未使用的属性和未使用的构造函数参数已一去不复返了。重构现在不那么痛苦了!

关于使用Spring 如何实现注入依赖就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI