DI的分类

DI:bean实例在调用无参构造器创建了空值对象后,对bean对象的属性进行初始化。初始化是由容器自动完成的,称为注入
注入分为:设值注入、构造注入

设值注入

概念:是指,通过setter方法传入被调用者的实例。这种注入方式简单、直观。
简单类型的设值注入
示例:
Student.java

package com.ba01;public class Student {private String name;private int age;public Student() {super();System.out.println("student无参数构造方法");}//setterpublic void setName(String name) {System.out.println("setName:"+name);this.name = name;}public void setAge(int age) {System.out.println("setAge:"+age);this.age = age;}//toString@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}}

applicationContext.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/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 声明Student对象 --><!-- DI:依赖注入,给属性赋值。简单类型:Spring中把String和java基本数据类型称为简单类型。1.设值注入:调用类的set方法完成赋值。 常用方式。1)简单类型的设值注入:<bean id="xx" class="yyy"><property name="属性名" value="简单类型的属性值" /><property name="属性名" value="简单类型的属性值" />...</bean>--><bean id="myStudent" class="com.ba01.Student"><property name="name" value="李四"/> <!-- setName() --><property name="age" value="20"/> <!-- setAge() --></bean></beans>

MyTest.java

package com.ba01;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {@Testpublic void test01(){String configLocation="com/ba01/applicationContext.xml";ApplicationContext ctx  = new ClassPathXmlApplicationContext(configLocation);Student student = (Student) ctx.getBean("myStudent");System.out.println("student:"+student.toString());//相当于/*** Student myStudent = new Student();* myStudent.setName("李四");* myStudent.setAge(20);*/}}


引用类型的设值注入
示例:
Student.java

package com.ba02;public class Student {private String name;private int age;//引用类型private School mySchool;public Student() {super();System.out.println("student无参数构造方法");}public void setName(String name) {System.out.println("setName:"+name);this.name = name;}public void setAge(int age) {System.out.println("setAge:"+age);this.age = age;}public void setMySchool(School mySchool) {System.out.println("setMySchool:"+mySchool);this.mySchool = mySchool;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", mySchool=" + mySchool + "]";}}

School.java

package com.ba02;public class School {private String name;private String address;public void setName(String name) {this.name = name;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "School [name=" + name + ", address=" + address + "]";}}

applicationContext.java

<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 声明Student对象 --><!-- DI:依赖注入,给属性赋值。简单类型:Spring中把String和java基本数据类型称为简单类型。1.设值注入:调用类的set方法完成赋值。 常用方式。2)引用类型的设值注入:①:使用ref属性<bean id="xx" class="yyy"><property name="引用类型的属性名" ref="bean的id" />...</bean>②:使用ref作为子标签<bean id="xx" class="yyy"><property name="引用类型的属性名" ><ref bean="bean的id" /></property>...</bean>--><!-- ref作为属性 --><bean id="myStudent" class="com.ba02.Student"><!-- 简单类型的属性赋值 --><property name="name" value="李四" /> <!-- setName() --><property name="age" value="20" /> <!-- setAge() --><!-- 引用类型设值注入 --><property name="mySchool" ref="myXueXiao" /> <!--setMySchool(myXueXiao)--></bean><!-- ref作为子标签 --><bean id="myStudent2" class="com.ba02.Student"><property name="name" value="张三" /> <!-- setName() --><property name="age" value="22" /> <!-- setAge() --><!-- 引用类型赋值 --><property name="mySchool"><ref bean="myXueXiao"/></property></bean><bean id="myXueXiao" class="com.ba02.School"><property name="name" value="北京大学" /><property name="address" value="北京的海淀区" /></bean></beans>

MyTest.java

package com.ba02;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {@Testpublic void test01(){String configLocation="com/ba02/applicationContext.xml";ApplicationContext ctx  = new ClassPathXmlApplicationContext(configLocation);//获取到ref作为属性方式的bean的idStudent student = (Student) ctx.getBean("myStudent");System.out.println("student:"+student.toString());}}

构造注入

概念:是指,在构造调用者实例的同时,完成被调用者的实例化。也就是使用构造器设值依赖关系。
示例:
Student.java

package com.ba03;public class Student {private String name;private int age;//引用类型private School mySchool;public Student() {super();System.out.println("student无参数构造方法");}//定义有参数的构造方法public Student(String myname ,int myage, School myXueXiao){System.out.println("有参数的Student构造方法");//属性赋值this.name = myname;this.age  = myage;this.mySchool = myXueXiao;}public void setName(String name) {System.out.println("setName:"+name);this.name = name;}public void setAge(int age) {System.out.println("setAge:"+age);this.age = age;}public void setMySchool(School mySchool) {System.out.println("setMySchool:"+mySchool);this.mySchool = mySchool;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", mySchool=" + mySchool + "]";}}

School.java

package com.ba03;public class School {private String name;private String address;public void setName(String name) {this.name = name;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "School [name=" + name + ", address=" + address + "]";}}

applicationContext.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/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 声明Student对象 --><!-- DI:依赖注入,给属性赋值。构造注入:调用类的有参数构造方法,创建对象的同时给属性赋值<constructor-arg>表示构造方法的参数,每个一个参数对应一个 <constructor-arg><constructor-arg>有两个属性是常用的 name 和 index --><!-- 是有三种方式完成构造注入 --><!-- 使用name属性,完成构造注入 --><bean id="myStudent" class="com.ba03.Student"><!-- 实现构造注入:name:构造方法的形参名称value:简单类型参数的值ref:引用类型参数的值--><constructor-arg name="myname" value="李四" /><constructor-arg name="myXueXiao" ref="myXueXiao1" /><constructor-arg name="myage" value="22" /></bean><!-- 使用index,完成构造注入 --><bean id="myStudent2" class="com.ba03.Student"><!-- 实现构造注入index:构造方法的参数位置, 从0开始。value:简单类型参数的值ref:引用类型参数的值--><constructor-arg index="1" value="20" /><constructor-arg index="0" value="张三" /><constructor-arg index="2" ref="myXueXiao1" /></bean><!-- 省略index属性 --><bean id="myStudent3" class="com.ba03.Student"><!-- 实现构造注入index:构造方法的参数位置, 从0开始。value:简单类型参数的值ref:引用类型参数的值--><constructor-arg  value="周瑜" /><constructor-arg  value="18" /><constructor-arg  ref="myXueXiao1" /></bean><bean id="myXueXiao1" class="com.ba03.School"><property name="name" value="北京大学" /><property name="address" value="北京的海淀区" /></bean></beans>

MyTest.java

package com.ba03;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {@Testpublic void test01(){String configLocation="com/ba03/applicationContext.xml";ApplicationContext ctx  = new ClassPathXmlApplicationContext(configLocation);Student student = (Student) ctx.getBean("myStudent");System.out.println("student:"+student.toString());}}

结束语

夜阑卧听风吹雨,铁马冰河入梦来。 ----《十一月四日风雨大作》 陆游

Spring------基于xml的DI (一)设值注入、构造注入相关推荐

  1. Spring基于XML装配Bean

    Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式.Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配.基于 Anno ...

  2. spring 基于XML的申明式AspectJ通知的执行顺序

    spring 基于XML的申明式AspectJ通知的执行顺序 关于各种通知的执行顺序,结论:与配置文件中的申明顺序有关 1. XML文件配置说明 图片来源:<Java EE企业级应用开发教程&g ...

  3. 【spring】spring基于xml的声明式事务控制

    结构 domain package com.itheima.domain;import java.io.Serializable;public class Account implements Ser ...

  4. spring基于XML的声明式事务控制-配置步骤

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  5. spring基于XML的AOP-编写必要的代码

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  6. Spring基于xml自动装配

    基于xml自动装配 手动装配 自动装配 首先写两个类Dept类和Emp类. Dept类: package com.Keafmd.spring5.autowire;/*** Keafmd** @Clas ...

  7. spring8: di依赖注入--构造注入

    package com.atChina.Test3;public class Student {private String name;private int age;private School s ...

  8. 【Spring】一文带你吃透基于XML的DI技术

    个人主页: 几分醉意的CSDN博客_传送门 文章目录

  9. Spring基于 XML 的声明式事务控制(配置方式)

    一.引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

  10. Spring 基于xml配置方式的AOP

    我们具体用代码来说明: 1.ArithmeticCalculator.java 1 package com.proc; 2 3 public interface ArithmeticCalculato ...

最新文章

  1. Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库
  2. js ZeroClipboard 拷贝文本到剪贴板
  3. 常用的shell脚本案例(14.04.15更新)
  4. 设计模式- 命令模式
  5. 考前自学系列·计算机组成原理·中央处理器知识点
  6. 2020-07-01 CVPR2020 表示学习论文讨论(2) 笔记
  7. VMware ubuntu 上网2
  8. 这样的奇技淫巧不可取,切记切记
  9. wordpress插件-WP Rocket 3.10.1_去广告已授权
  10. 长文详解Attention、Seq2Seq与交互式匹配
  11. CRUISE软件测试工程师,CruiseControl.NET配置
  12. 平板电脑(台电x80HD)安装Ubuntu18.04教程- Z3735系列CPU通用
  13. 2021新手、小白快速安装KALI教程
  14. 小米系列手机(包括红米,黑鲨)开启调试模式
  15. paperwhite3翻页_亚马逊Kindle Paperwhite 3G / Wi-Fi评论
  16. P5713 【深基3.例5】洛谷团队系统(C语言)
  17. web程序设计(9)——编写阅读器(JQuery基础)
  18. 【高等数学基础进阶】导数与微分
  19. git上传详细步骤和提交代码的各种报错解决方式.
  20. Python基础之列表、元组、字典、集合的使用

热门文章

  1. 强大易用的网页在线excel转json工具,值得一看
  2. 全国硕士研究生入学统一考试计算机学科专业基础综合冲刺指南
  3. JupyterLab 格式化代码插件
  4. ftp软件是什么如何使用,ftp软件是什么如何使用
  5. Halcon平铺tile三算子浅析
  6. 2021 RoboCom 世界机器人开发者大赛-本科组(决赛)题解
  7. G711转AAC代码总结【转】
  8. selector.select()和selector.selectedKeys()
  9. 三维动画云渲染软件的性价比排行
  10. 闲置电视盒子不要扔!搭建Blynk物联网服务器,太香了!