spring依赖注入

卞喜
• 阅读 63

spring依赖注入

在没有依赖注入之前,我们想要什么都需要自己主动地去获取

private Car car;
private House house;
public Person(){
  car = new Car();
  house = new House();
}

但是我们真正只是需要调用该依赖对象做某些事情,只要在用的时候,该对象是可以调用的就可以,该对象是主动获取还是别人送过来并没有太大的区别

IOC&&DI

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,用来降低耦合度,IOC(Inversion of Control)目前比较流行的有两种方式:

  • 依赖注入DI(Dependency Injection) 代码中无需给出目标对象的定位路径,只需给定对象名称和类型,系统就会直接去容器中进行查找,spring使用的就是这种形式
  • 依赖查找DL(Dependency Lookup) 代码中需要给出目标对象的存放路径,系统会根据路径到容器中查找响应的对象,典型的应用是JNDI

org.springframework.beans.factory.BeanFactory是IOC容器的接口定义,是Spring IOC容器的核心接口

Spring IOC本质是创建类实例的工厂,并且对类实例进行管理,负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。

<!-- more -->

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

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

IOC的注入方式:1、构造器依赖注入 2、Setter方法注入 3、属性注入(使用注解标注,通过反射注入到field)

在《spring揭秘》中提到接口注入,实现某个接口,该接口中会声明一个方法,该方法的参数就是所依赖的对象类型,当然这种方式过于繁琐,早就被淘汰了,毕竟是spring2.5
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>
https://zhhll.icu/2021/框架/spring/基础/6.spring依赖注入/

本文由mdnice多平台发布

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Spring IoC依赖注入:Spring提供了哪些依赖注入模式和类型呢?
欢迎关注公众号“码农架构”专注于高可用、高性能、高并发类技术分享!!(https://oscimg.oschina.net/oscnet/8ed45cf7d242440bb0b9b74b5dfd0c47.png)Spring容器最基本最基本的接口就是BeanFactory。BeanFactory负责配置,创建、配置Bean,其中有一
Easter79 Easter79
3年前
SpringBoot基础篇Bean之基本定义与使用
更多Spring文章,欢迎点击一灰灰BlogSpring专题(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fspring.hhui.top)我们知道在Spring中,有两个非常有名的特性,依赖注入(DI)与切面(AOP),其中依赖注入其主要的作用,可以说就是维护Spring容
Stella981 Stella981
3年前
SpringBoot基础篇Bean之基本定义与使用
更多Spring文章,欢迎点击一灰灰BlogSpring专题(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fspring.hhui.top)我们知道在Spring中,有两个非常有名的特性,依赖注入(DI)与切面(AOP),其中依赖注入其主要的作用,可以说就是维护Spring容
Easter79 Easter79
3年前
Spring一些问题记录
1、在非springbean中注入bean        在项目中有时需要根据需要在自己new一个对象,或者在某些util方法或属性中获取SpringBean对象,从而完成某些工作,但是由于自己new的对象和util方法并不是受Spring所管理的,如果直接在所依赖的属性上使用@Autowired就会报无法注入的错误,或者是没报错,但是使用的时候会
Stella981 Stella981
3年前
69道Spring面试题和答案
目录Spring概述依赖注入SpringbeansSpring注解Spring数据访问Spring面向切面编程(AOP)SpringMVCSpring 概述1. 什么是spring?Spring 是个java企业
Easter79 Easter79
3年前
Spring——多种方式实现依赖注入
  在Spring的XML配置中,只有一种声明bean的方式:使用<bean元素并指定class属性。Spring会从这里获取必要的信息来创建bean。但是,在XML中声明DI时,会有多种可选的配置方式和风格,具体到setter方式、构造器方式和P命名空间方式。一、使用setter进行注入!(https://img2018.c
Easter79 Easter79
3年前
Spring实战第四版笔记
一、Spring的功能底层一般都依赖于它的两个核心特性:依赖注入(DI)、面向切面编程(AOP)。  (1)依赖注入(DI)    背景:在一些有实际应用的类中都会有两个或者更多的类组成,这些类相互之间进行协作来完成特定的业务逻辑。按照传统的做法,每个对象负责管理与自己相互协作的对象(即它所依赖的对象,一般是使用new来创建对象)的引用,这
Stella981 Stella981
3年前
React 源码中的依赖注入方法
一、前言依赖注入(DependencyInjection)这个概念的兴起已经有很长时间了,把这个概念融入到框架中达到出神入化境地的,非Spring莫属。然而在前端领域,似乎很少会提到这个概念,难道前端的代码就不需要解耦吗?前端的代码就没有依赖了?本文将以React的源码为例子,看看它是如何使用依赖注入这一设计模式的。二、依赖注入的基
Wesley13 Wesley13
3年前
Spring方法注入
在spring中注入方式有3中:1,构造函数注入2,set方法注入3,接口注入(方法注入)在spring中的bean默认范围都是单例,但是在特定的情况下,我们需要有如下的业务需要,单例bean1需要依赖非单例bean2,由于bean1始终是单例,所以如果不做出改变,每次获取的bean2也是同一个,容器就没办法给我们提供
当我们在谈论构造函数注入的时候我们在谈论什么 | 京东物流技术团队
依赖注入当涉及依赖注入(DependencyInjection,DI)时,首先推荐使用构造函数注入,因为构造函数注入有很多技术优点,而且还与面向对象的设计原则密切相关。在业界,构造函数注入作为依赖注入的一种最佳实践得到了广泛的认可,在SpringFrame