依赖注入是时下最流行的IoC实现方式,
依赖注入分为
接口注入(Interface Injection),
Setter方法注入(Setter Injection)
构造器注入(Constructor Injection)

其中接口注入由于在灵活性和易用性比较差,现在从Spring4开始已被废弃。

构造器依赖注入

构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。

使用案例

1、导入依赖

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.17</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.17</version><scope>compile</scope></dependency>

2、创建实体类

package com.walker.spring.entity;public class ConstructorEntity {private String name;private String age;//1、创建构造方法public ConstructorEntity(String name, String age) {this.name = name;this.age = age;}//以及getter方法也需要,用于待会测试使用public String getName() {return name;}public String getAge() {return age;}
}

3、beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- constructor-arg:构造参数index:索引,代表第几个参数value:值--><bean id="constructorEntity" class="com.walker.spring.entity.ConstructorEntity"><constructor-arg index="0" value="walker aaaa"/><constructor-arg index="1" value="20"/></bean></beans>

4、编写测试方法并执行

    /*** 测试构造方法*/public void testConstructor(){//1、创建xml读取上下文contextApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");//2、使用context获取对应的容器ConstructorEntity constructorEntity = (ConstructorEntity) context.getBean("constructorEntity");//3、输出System.out.println(constructorEntity.getName());System.out.println(constructorEntity.getAge());}

之后再main方法中执行
返回结果:

walker aaaa
20

Setter方法注入

Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

使用案例

1、导入依赖

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.17</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.17</version><scope>compile</scope></dependency>

2、创建实体类

package com.walker.spring.entity;import lombok.Data;public class TestEntity {private String name;private String age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}
}

3、创建beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!--id:容器的id 可以自定义class: 实体类的全路径property:属性--><bean id="testEntity" class="com.walker.spring.entity.TestEntity"><property name="name" value="Hello World!" /><property name="age" value="18"/></bean></beans>

4、测试

package com.walker.spring;import com.walker.spring.entity.TestEntity;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {//1、创建xml读取上下文contextApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");//2、使用context获取对应的容器TestEntity testEntity = (TestEntity) context.getBean("testEntity");//3、输出System.out.println(testEntity.getName());System.out.println(testEntity.getAge());}
}

5、返回结果

Hello World!
18

返回的结果是beans.xml中设置的

构造器依赖注入和 Setter方法注入的区别

构造函数注入 setter注入
没有部分注入 有部分注入
不会覆盖 setter 属性 会覆盖 setter 属性
任意修改都会创建一个新实例 任意修改不会创建一个新实例
适用于设置很多属性 适用于设置少量属性

两种依赖方式都可以使用,构造器注入和Setter方法注入。最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖。

【spring系列】spring依赖注入实现方式(含案例)相关推荐

  1. Spring系列之依赖注入的三种方式

    目录 一.依赖注入方式 1.使用属性的setXXX方法注入 2.构造函数注入 (1)按类型匹配入参type (2)按索引匹配入参index (3)联合使用类型和索引匹配入参[type和index一起使 ...

  2. JavaEE开发之Spring中的依赖注入与AOP编程

    上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...

  3. Spring源码系列:依赖注入(二)createBean

    在Spring源码系列:依赖注入(一)(AbstractBeanFactory-getBean)最后说道getBean是依赖注入的起点,bean的创建都是通过createBean来完成具体的创建的.c ...

  4. spring中的依赖注入——构造函数注入、set方法注入( 更常用的方式)、复杂类型的注入/集合类型的注入

    spring中的依赖注入 依赖注入: Dependency Injection IOC的作用:降低程序间的耦合(依赖关系) 依赖关系的管理:以后都交给spring来维护.在当前类需要用到其他类的对象, ...

  5. spring四种依赖注入方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. spring提出了依赖注入的思想,即依赖不由程序 ...

  6. Spring依赖注入的方式、类型、Bean的作用域、自动注入、在Spring配置文件中引入属性文件...

    1.Spring依赖注入的方式 通过set方法完成依赖注入 通过构造方法完成依赖注入 2.依赖注入的类型 基本数据类型和字符串 使用value属性 如果是指向另一个对象的引入 使用ref属性 User ...

  7. Spring详解-------依赖注入的三种方式实例详解

    目录 1.什么是依赖注入 1.1类的关系 1.1.1 依赖关系(Dependency) 1.1.2 聚合(Aggregation) 1.2关系强度 2 为什么使用依赖注入 2.1开闭原则 2.1.1 ...

  8. 详解Spring框架的依赖注入

    本篇主要介绍Spring的依赖注入.依赖注入是Spring协调不同Bean实例之间的合作而提供的一种工作机制,在确保Bean实例之间合作的同时,并能保持每个Bean的相对独立性.通过本篇的学习,可以达 ...

  9. Spring -Spring的 DI - 依赖注入的 使用学习

    一 . spring的DI 依赖注入,一句话总结 :给属性赋值 :           一个类中的属性都可以采用springDI的方式进行赋值,但是并不是所有的属性都适合赋值: 1. 利用set给属性 ...

最新文章

  1. Leetcode 347. Top K Frequent Elements--python1行解法,Java 11ms解法
  2. Java 类的一些高级特征
  3. 《软件工艺师:专业、务实、自豪》一3.7.2 软件工艺概念走向全球
  4. 阴阳师人数最多的服务器,《阴阳师》手游部分服务器合并公告
  5. r语言 面板数据回归_R语言_018回归
  6. php 完美防sql注入,PHP 完美的防XSS 防SQL注入的代码
  7. bluetooth射频已关闭请打开bluetooth射频_【05/25 - 公告】微软已推送 Build 18362.145 (KB4497935) 版本...
  8. [转]Oracle销售人员普遍腐败?
  9. sql生成(查询数据的存储过程)代码的存储过程
  10. linux makefile教程,Makefile简单入门教程
  11. Hive窗口分析函数(案例详细讲解)
  12. VS2017社区版+Qt5.12.2+VTK8.2环境搭建
  13. 桑拿锁技术升级:桑拿手牌复制休矣!
  14. print 设置纸张的高度_祝贺! 2020珠峰高程测量登山队成功登顶!用Python计算一张纸对折多少次会超过珠峰高度?...
  15. php prepare错误,php环境错误,Loader.php报错
  16. Ubuntu16.04安装搜狗中文输入法
  17. jQuery使用ajaxSubmit()提交表单示例(转)
  18. android租车管理系统,基于Android汽车租赁系统设计与实现.doc
  19. 考研最卷的专业,我提名新传
  20. 什么是事件驱动架构(EDA)? 一个会写诗的程序员

热门文章

  1. 前端大作业-Boostrap实现静态登录和后台页面
  2. 笔记本硬盘飚速 首款1T 7200转本盘详测
  3. 基于layui的省市区三级联动
  4. 在linux系统下运行.dat文件
  5. html让矩形居中,css如何实现水平居中?
  6. 化境上传的时出现 错误 '800a0bbc' 的解决方案
  7. 阿里巴巴数字智能工厂完整解决方案【PPT】
  8. Linux常见安装包格式
  9. d3中文案例_D3js初探及数据可视化案例设计实战
  10. css蓝桥杯--电影院排座位