首页 > 编程知识 正文

spring依赖注入原理,java类实例化

时间:2023-05-03 23:20:04 阅读:116427 作者:1866

本文介绍了如何在spring框架依赖关系注入中使用项目lombok获得最佳实践。

Spring框架本身有多种方法可以执行相关性注入。 可选的灵活性是Spring框架的优点。 但是,并非所有依赖性注入选项都被视为最佳做法。 实际上有些东西不太好。

依赖于注入例

为了确定需要使用的各种依赖关系注入选项,我们给出了一些设置示例。

以Spring Service为例。 为了我们的目的,这个服务有返回字符串的方法。 使用service,然后使用Spring注入几个模拟控制器。 请记住,我们只是在寻找使用spring框架注入依赖关系的方法。

范例服务

公共类我的服务{

公共字符串获取hello () {

返回' hello ';

}

}

我们字段中有公共属性的服务。 可以对此字段进行评论。 Spring将注入到服务的实例中。

属性注入

场控制器

@Controller

公共类字段控制器{

@Autowired

我的服务我的服务;

公共字符串say something (

return myService.getHello (;

}

}

这只是公共属性,没有setter。 很明显,这不是好的实践,我不推荐。

您可以对此进行改进,使对该字段的访问权限变为私有。 Spring Framework允许您自动组装专用字段。 我确实看到有人这么做了。 Spring执行一些反射魔术来执行依赖性注入

私人现场控制器

publicclassprivatefieldcontroller {

@Autowired

隐私我的服务我的服务;

公共字符串say something (

return myService.getHello (;

}

}

最好只使用私人字段,但测试成了头痛的问题。 必须启动Spring Context,或使用一些Spring实用程序执行依赖注入以进行测试。 虽然不是世界末日,但总的来说会很麻烦。

这可以通过为私有属性提供setter来改进。 Getter和Setter通常被认为是面向对象编程中的最佳实践。 使用注释setter方法很容易指示Spring使用setter进行相关性注入。

方法注入

安装控制器

@Controller

公共类设置控制器{

隐私我的服务我的服务;

@Autowired

我的服务我的服务(publicvoidsetmyservice )。

this.my服务=my服务;

}

公共字符串say something (

return myService.getHello (;

}

}

这是使用私有字段时的明显改进。 有人抱怨这个代码写得太多了。 但是,实际上,从South Park第一季度开始,这些任务在现代IDE中实现了自动化。

构造函数注入

以下选项是使用构造函数: 到目前为止,这是我们研究过的最好的方法。 使用构造函数设置注入属性时,不需要指定自动装配注释。 这是一个很好的功能,可以节省输入时间。 从spring framework 4.2版开始,对相关性注入构造函数的注释是可选的。

构造器控制器

@Controller

publicclassconstructorcontroller {

隐私我的服务我的服务;

publicconstructorcontroller (我的服务我的服务) {

this.my服务=my服务;

}

公共字符串say something (

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 减轻了您的日常工作。

我在日常编码中一直使用这种技术。绝对是节省时间。并导致更干净的代码。未使用的属性和未使用的构造函数参数已一去不复返了。重构现在不那么痛苦了!

本文的源代码可在GitHub上找到。

以上就是Spring 依赖注入实现示例的详细内容,更多关于Spring 依赖注入的资料请关注脚本之家其它相关文章!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。