spring依赖注入深入理解

 更新时间:2021年03月01日 17:05:00   作者:徘徊在深夜中的猫  
这篇文章主要介绍了spring依赖注入深入理解,列举了最常见的注入方式,有感兴趣的同学可以研究下

IOC&&DI

IOC(Inversion of Control)一般分为两种类型:依赖注入DI(Dependency Injection)和依赖查找(Dependency Lookup)

org.springframework.beans.factory.BeanFactory是IOC容器的具体实现,是Spring IOC容器的核心接口

Spring IOC负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。

优点:把应用的代码量降到最低。最小代价和最小侵入式是松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载

DI依赖注入是IOC的一个方面,不需要创建对象,只需描述如何被创建,在配置文件中描述组件需要哪些服务,之后IOC容器进行组装

IOC的注入方式:1、构造器依赖注入 2、Setter方法注入 3、工厂方法注入(很少使用)

Setter方法注入

通过Setter方法注入bean的属性值或依赖的对象,是最常用的注入方式

<!-- property来配置属性 
	name为属性名
 	value为属性值
-->
<bean id="helloWorld" class="com.zhanghe.study.spring4.beans.helloworld.HelloWorld">
 <property name="name" value="Spring Hello"/>
</bean>

构造器注入

构造器注入需要提供相应的构造器

<!-- 可以使用index来指定参数的顺序,默认是按照先后顺序 -->
<bean id="car" class="com.zhanghe.study.spring4.beans.beantest.Car">
 <constructor-arg value="法拉利" index="0"/>
 <constructor-arg value="200" index="1"/>
</bean>

但是如果存在重载的构造器的话,只使用index索引方式无法进行精确匹配,还需要使用类型type来进行区分,index和type可以搭配使用

public Car(String brand, double price) {
 this.brand = brand;
 this.price = price;
}

public Car(String brand, int speed) {
 this.brand = brand;
 this.speed = speed;
}
<bean id="car" class="com.zhanghe.study.spring4.beans.beantest.Car">
 <constructor-arg value="法拉利" index="0"/>
 <constructor-arg value="20000.0" type="double"/>
</bean>

<bean id="car2" class="com.zhanghe.study.spring4.beans.beantest.Car">
 <constructor-arg value="玛莎拉蒂" index="0"/>
 <constructor-arg value="250" type="int"/>
</bean>

到此这篇关于spring依赖注入深入理解的文章就介绍到这了,更多相关spring依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决Mac m1 电脑 idea 卡顿的问题

    解决Mac m1 电脑 idea 卡顿的问题

    这篇文章主要介绍了Mac m1 电脑 idea 卡顿的问题解决,文中给大家补充介绍了IDEA卡顿问题处理方法,需要的朋友可以参考下
    2023-03-03
  • Spring Data JPA 之 JpaRepository的使用

    Spring Data JPA 之 JpaRepository的使用

    这篇文章主要介绍了Spring Data JPA 之 JpaRepository的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 16个SpringBoot扩展接口的总结和实例

    16个SpringBoot扩展接口的总结和实例

    Spring Boot是一个开源的Java框架,它简化了基于Spring的应用程序的开发和部署,它提供了许多强大的特性和扩展接口,本文给大家介绍了16个常用的Spring Boot扩展接口,需要的朋友可以参考下
    2023-09-09
  • Java结合uniapp实现验证码功能的示例详解

    Java结合uniapp实现验证码功能的示例详解

    UniApp 是一个基于 Vue.js 的跨平台应用开发框架,允许开发者使用统一的代码库来构建多平台应用,这篇文章将给大家介绍Java结合uniapp实现验证码功能,文中通过详细的代码示例讲解的非常详细,需要的朋友可以参考下
    2024-07-07
  • SpringSessionRedis配置及发现的问题讲解

    SpringSessionRedis配置及发现的问题讲解

    今天小编就为大家分享一篇关于SpringSessionRedis配置及发现的问题讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • mybatis自动扫描和自定义类注解方式

    mybatis自动扫描和自定义类注解方式

    这篇文章主要介绍了mybatis自动扫描和自定义类注解方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • spring-boot-starter-thymeleaf加载外部html文件方式

    spring-boot-starter-thymeleaf加载外部html文件方式

    本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在Spring Boot中使用Thymeleaf的基本步骤,包括引入依赖、创建Controller、创建HTML文件、参数化访问、热加载和热更新文件
    2025-02-02
  • MyBatis中TypeHandler的使用教程详解

    MyBatis中TypeHandler的使用教程详解

    在我们平常开发操作数据库时,查询、插入数据等操作行为,有时会报数据类型不匹配异常,就可以得知数据的类型是不唯一的必然是多种不同的数据类型,本文给大家介绍了MyBatis中TypeHandler的使用教程,需要的朋友可以参考下
    2024-12-12
  • Java由浅入深讲解继承上

    Java由浅入深讲解继承上

    继承就是可以直接使用前辈的属性和方法。自然界如果没有继承,那一切都是处于混沌状态。多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作
    2022-04-04
  • mybatis条件语句中带数组参数的处理

    mybatis条件语句中带数组参数的处理

    这篇文章主要介绍了mybatis条件语句中带数组参数的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论