当前位置: 首页 > 面试题库 >

Spring的Setter DI vs.Constructor DI?

景昊焜
2023-03-14
问题内容

spring有两种两种类型的DI:设定器DI和结构DI。

基于构造函数的DI固定需要注入依赖项的顺序。基于Setter的DI不提供此功能。

基于Setter的DI帮助我们仅在需要时才注入依赖,而不是在构造时要求依赖。

我看不到任何其他显着差异,因为两种类型的Spring DI提供相同的功能-设置程序和构造函数DI在代码启动时都会注入依赖项。诚然,构造函数DI将通过构造函数完成此操作,而setter DI将在构造对象后立即通过setter完成此操作,但对于开发人员而言,在性能等方面没有任何区别。两者都提供了指定顺序的方法依赖注入。


问题答案:

关于Spring的特定优缺点:

  • 构造函数注入(根据定义)不允许你在bean之间创建循环依赖关系。这个限制实际上是构造函数注入的一个优势-使用setter注入时,Spring可以解决循环依赖性,而你甚至不会注意到。

  • 另一方面,如果使用构造函数注入,则CGLIB无法创建代理,从而迫使你使用基于接口的代理或虚拟无参构造函数。



 类似资料:
  • 服务器应为无状态 不能期望客户端存储Cookie。 发送到服务器的凭据不应为纯文本 我是Spring Security的新手,因此如果我能在实现它时得到任何帮助,我将不胜感激。

  • 问题内容: 我已经设计了一个Spring Boot REST API ADD和GET方法 卡夫卡听众 在服务层中,我需要返回来自的项目列表。 使用Spring kafka进行REST API的最佳方法是什么? 问题答案: 您需要使用a 将结果返回到rest控制器。 参见ReplyingKafkaTemplate。 2.1.3版引入了KafkaTemplate的子类来提供请求/回复语义。该类名为Re

  • 问题内容: 我在Spring应用程序中遵循此方案。 请求与对象的ID以及要在此对象中填充的其他一些参数一起发送到服务器 具有此ID的对象是从数据库中加载的 在此对象中调用getter和setter来填充值 然后存储对象 我问了另一个问题,在填充请求的参数之前准备对象的最佳方法是什么?答案是最好的方法是使用转换服务,而不是使用@ModelAtribute批注方法或使用initBinder中的编辑器进

  • 我正在逐步将Spring Boot引入Spring JPA项目。我的意图是首先介绍Spring Boot,而不是在一些后期的Spring数据,但我找不到任何使用Spring Boot JPA而没有Spring数据的示例(也找不到合适的启动器)。 怎么会?在没有Spring数据的情况下,将Spring Boot引入Spring JPA项目有什么好处吗?或者只有在Spring数据到位的情况下才有意义。

  • 我们最近从Spring Cloud Netflix Ribbon迁移到Spring Cloud LoadBalancer,并使用Spring Cloud kubernetes作为发现客户端。 现在spring.cloud.kubernetes.ribbon.mode(https://cloud.spring.io/spring-cloud-static/spring-cloud-kubernete

  • 问题内容: 我正在寻找一个好的安全框架,该框架可以对方法的基于参数的访问规则进行注释。 基本上,我想检查是否允许通过身份验证的用户以特定对象作为参数调用特定方法。 春季安全性可以满足我的需求,但是由于这个原因(春季论坛),如果我无法使其正常工作,我正在寻找替代方法。 要求: 基于配置或注释的方法安全性,我想避免将安全代码放在我的服务方法中 规则基于方法的参数,仅基于角色的安全性是不够的 开箱即用的

  • 我想在我的应用程序中使用LDAP,以便进行身份验证 在前面的配置中,我使用数据库进行身份验证 不,我想使用ldap进行身份验证 我修改了security-app-context.xml 但是当我测试时,我有这样一个错误: LDAP://192.168.0.88:389 基本DN DC=部长,DC=FR 身份验证搜索筛选器 (&(objectclass=person)(mail=@email_add

  • 我对SpringCors有意见。 我在 chome 上收到此错误:从源“http://localhost:4200”以“http://localhost:8080/api/informationWS”访问 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“访问控制-允许-源”标头。 我的文件Web安全配置适配器 我的文件资源服务器配置适配器 我试图以以下两种方式与Cors