【Spring】一文带你吃透基于XML的DI技术
创始人
2024-01-27 01:47:48

在这里插入图片描述

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

文章目录

  • 💖基于XML的DI
    • ✨set注入
      • 💫基本语法
      • 💫和属性名无关
      • 💫给非自定义类属性赋值
      • 💫引用类型注入
    • ✨构造注入
      • 💫name属性
      • 💫index属性
    • ✨引用类型的自动注入
      • 💫byName自动注入
      • 💫byType自动注入
  • 💖投票传送门(欢迎伙伴们投票)

💖基于XML的DI

DI:给属性赋值。
DI分类:①set注入,也叫做设值注入;②构造注入。

在xml配置文件中使用标签和属性,完成对象创建,属性赋值。
①set注入,也叫做设值注入。
概念:spring调用类中的set方法,在set方法中可以完成属性赋值。推荐使用。
②构造注入
构造注入:spring调用类中的有参数构造方法,在创建对象的同时,给属性赋值。

✨set注入

set注入,也叫做设值注入。
概念:spring调用类中的set方法,在set方法中可以完成属性赋值。推荐使用。

💫基本语法

首先我们创建一个类,生成get、set和toString方法。
注意:使用Set注入,必须要有Set方法。

public class Student {private String name;private int age;public Student() {System.out.println("Student无参数构造方法");}public void setName(String name) {System.out.println("setName==="+name);this.name = "Hello:"+name;}public void setAge(int age) {System.out.println("setAge=="+age);this.age = age;}public void setEmail(String email){System.out.println("setEmail==="+email);}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}
   DI:给属性赋值简单类型: java中的基本数据类型和String1. set注入: spring调用类的set方法,通过set方法完成属性赋值简单类型的set注入:语法: ...

属性名就是set方法后面跟的,例如setName,属性名就是name

接下来我们打开spring配置文件



下一步我们来进行测试

public class MyTest {@Testpublic void test01(){String config = "ba01/applicationContext.xml";ApplicationContext ctx = new ClassPathXmlApplicationContext(config);Student student = (Student) ctx.getBean("myStudent");System.out.println(student);}

在这里插入图片描述

💫和属性名无关

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
总结:spring通过调用set方法进行赋值,所以会输出setEmail==123@qq.com。

💫给非自定义类属性赋值

通过set给属性赋值,那么怎么给你不熟悉的类来完成属性赋值呢? 思路:找到这个类的set方法

这里拿Date举例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

那么接下来我们开始实操

首先在配置文件中声明日期类




下一步我们来进行测试

public class MyTest {@Testpublic void test01(){String config = "ba01/applicationContext.xml";ApplicationContext ctx = new ClassPathXmlApplicationContext(config);Student student = (Student) ctx.getBean("mydate");System.out.println(student);}

在这里插入图片描述

💫引用类型注入

首先我们新建一个类,生成Set和toString方法。

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 + '\'' +'}';}
}

然后我们回到Student类中,引用school类,并创建对应的set和toString方法。

public class Student {private String name;private int age;//引用类型private School school;public Student() {System.out.println("Student无参数构造方法");}public void setName(String name) {System.out.println("setName==="+name);this.name = "Hello:"+name;}public void setAge(int age) {System.out.println("setAge=="+age);this.age = age;}public void setSchool(School school) {System.out.println("setSchool="+school);this.school = school;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", school=" + school +'}';}
}

然后我们打开Spring配置文件

   set注入:引用类型set注入:语法:...


下面我们进行测试

@Testpublic void test02(){String config="ba02/applicationContext.xml";ApplicationContext ctx  = new ClassPathXmlApplicationContext(config);Student student = (Student) ctx.getBean("myStudent");System.out.println("student="+student);}

执行结果:student=Student{name=‘Hello:李四’, age=22, school=School{name=‘安徽大学’, address=‘安徽的合肥’}}

✨构造注入

构造注入:spring调用类中的有参数构造方法,在创建对象的同时,给属性赋值。

💫name属性

首先还是创建一个School 类

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 + '\'' +'}';}
}

创建Student 类,其中引用School 类,创建无参、有参数构造方法,在有参构造中给属性依次赋值。

public class Student {private String name;private int age;//引用类型private School school;public Student() {System.out.println("Student无参数构造方法");}//创建有参数构造方法public Student(String myname,int myage, School mySchool){System.out.println("Student有参数构造方法");//给属性依次赋值this.name = myname;this.age = myage;this.school = mySchool;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", school=" + school +'}';}
}

接下来打开spring配置文件

    构造注入: Spring调用类的有参数构造方法,创建对象同时给属性赋值语法:: 表示一个构造方法的形参标签有属性: name :构造方法形参名index:构造方法的参数位置value:简单类型的形参值ref:  引用类型的形参值


接下来我们进行测试
在这里插入图片描述
输出:student=Student{name=‘李四’, age=22, school=School{name=‘安徽大学’, address=‘安徽的合肥’}}

💫index属性

首先我们打开spring配置文件
在这里插入图片描述
然后我们进行测试
在这里插入图片描述
在这里插入图片描述
下面我来介绍一下然后省略index属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

✨引用类型的自动注入

引用类型的自动注入

概念:spring可以根据某些规则给引用类型完成赋值。只对引用类型有效。

规则byName,byType.

①:byName(按名称注入):java类中引用类型属性名称和spring容器中bean的id名称一样的,且数据类型也是一样的,这些bean能够赋值给引用类型。
②:byType(按类型注入):java类中引用类型的数据类型和spring容器中bean的class值是同源关系的,这样的bean赋值给引用类型。

💫byName自动注入

注意:也要有set才能自动注入
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

💫byType自动注入

在这里插入图片描述

💖投票传送门(欢迎伙伴们投票)

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
电脑c盘满了怎么办 如何深度清... 如果电脑在使用一段时间后,C盘莫名其妙满了,磁盘变成红色,那么大多数都是因为自己使用上的问题,不接受...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...