经典面试题-构造方法注入和设值注入有什么区别?

请注意以下明显的区别:

  • 1.在设值注入方法支持大部分的依赖注入,如果我们仅需要注入int、string和long型的变量,我们不要用设值的方法注入。对于基本类型,如果我们没有注入的话,可以为基本类型设置默认值。在构造方法注入不支持大部分的依赖注入,因为在调用构造方法中必须传入正确的构造参数,否则的话为报错。
  • 2.设值注入不会重写构造方法的值。如果我们对同一个变量同时使用了构造方法注入又使用了设置方法注入的话,那么构造方法将不能覆盖由设值方法注入的值。很明显,因为构造方法尽在对象被创建时调用。
  • 3.在使用设值注入时有可能还不能保证某种依赖是否已经被注入,也就是说这时对象的依赖关系有可能是不完整的。而在另一种情况下,构造器注入则不允许生成依赖关系不完整的对象。
  • 4.在设值注入时如果对象A和对象B互相依赖,在创建对象A时Spring会抛出ObjectCurrentlyInCreationException异常,因为在B对象被创建之前A对象是不能被创建的,反之亦然。所以Spring用设值注入的方法解决了循环依赖的问题,因对象的设值方法是在对象被创建之前被调用的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spring Boot 2.X 系列

Spring Boot 2.X(二):集成 MyBatis 数据层开发

MyBatis 是一款优秀的持久层框架,支持定制化 SQL、存储过程以及高级映射。它采用面向对象编程的方式对数据库进行 CRUD 的操作,使程序...

7740
来自专栏Spring Boot 2.X 系列

Spring Boot 2.X(一):入门篇

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架遵循”...

9330
来自专栏Spring Boot 2.X 系列

Spring Boot 2.X(六):Spring Boot 集成 Redis

Redis 是目前使用的非常广泛的免费开源内存数据库,是一个高性能的 key-value 数据库。

11540
来自专栏Spring Boot 2.X 系列

Spring Boot 2.X(八):Spring AOP 实现简单的日志切面

AOP 的全称为 Aspect Oriented Programming,译为面向切面编程,是通过预编译方式和运行期动态代理实现核心业务逻辑之外的横切行为的统一...

12050
来自专栏用户5521492的专栏

SpringBoot | SpringBoot 是如何实现日志的?

说到日志框架不得不说门面模式。门面模式,其核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。用一张图来表示门面模式的结构为:

11250
来自专栏Spring Boot 2.X 系列

Spring Boot 2.X(四):Spring Boot 自定义 Web MVC 配置

Spring Boot 不仅提供了相当简单使用的自动配置功能,而且开放了非常自由灵活的配置类。Spring MVC 为我们提供了 WebMvcConfigura...

10450
来自专栏CWIKIUS

Gradle 如何打包 Spring Boot 可执行 JAR

如何在 Gradle 中配置一个项目可以打包为 Spring Boot 可执行 Jar?

10530
来自专栏DevOps持续集成

SpringBoot应用容器化过程

项目地址:https://github.com/gazgeek/springboot-helloworld.git

9030
来自专栏Spring Boot 2.X 系列

Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用

Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中。本文主要通过简述 Spring MVC 的架构及...

10330
来自专栏Spring Boot 2.X 系列

Spring Boot 2.X(七):Spring Cache 使用

Spring Cache 提供了 @Cacheable 、@CachePut 、@CacheEvict 、@Caching 等注解,在方法上使用。通过注解 Ca...

11640

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励