spring依赖注入

spring依赖注入

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

java 复制代码
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本质是创建类实例的工厂,并且对类实例进行管理,负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。

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

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

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

在《spring揭秘》中提到接口注入,实现某个接口,该接口中会声明一个方法,该方法的参数就是所依赖的对象类型,当然这种方式过于繁琐,早就被淘汰了,毕竟是spring2.5

Setter方法注入

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

xml 复制代码
<!-- property来配置属性  
	name为属性名
 	value为属性值
-->
<bean id="helloWorld" class="com.zhanghe.study.spring4.beans.helloworld.HelloWorld">
  <property name="name" value="Spring Hello"/>
</bean>
构造器注入

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

xml 复制代码
<!-- 可以使用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可以搭配使用

java 复制代码
public Car(String brand, double price) {
  this.brand = brand;
  this.price = price;
}

public Car(String brand, int speed) {
  this.brand = brand;
  this.speed = speed;
}
xml 复制代码
<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>

zhhll.icu/2021/框架/spr...

本文由mdnice多平台发布

相关推荐
新手小袁_J2 分钟前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
呆呆小雅3 分钟前
C#关键字volatile
java·redis·c#
Monly214 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
Ttang236 分钟前
Tomcat原理(6)——tomcat完整实现
java·tomcat
钱多多_qdd17 分钟前
spring cache源码解析(四)——从@EnableCaching开始来阅读源码
java·spring boot·spring
waicsdn_haha19 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
Q_192849990629 分钟前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
Code_流苏31 分钟前
VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)
java·ide·vscode·搭建·java开发环境
禁默1 小时前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架