Spring------基于xml的DI (一)设值注入、构造注入
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 (一)设值注入、构造注入相关推荐
- Spring基于XML装配Bean
Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式.Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配.基于 Anno ...
- spring 基于XML的申明式AspectJ通知的执行顺序
spring 基于XML的申明式AspectJ通知的执行顺序 关于各种通知的执行顺序,结论:与配置文件中的申明顺序有关 1. XML文件配置说明 图片来源:<Java EE企业级应用开发教程&g ...
- 【spring】spring基于xml的声明式事务控制
结构 domain package com.itheima.domain;import java.io.Serializable;public class Account implements Ser ...
- spring基于XML的声明式事务控制-配置步骤
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- spring基于XML的AOP-编写必要的代码
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- Spring基于xml自动装配
基于xml自动装配 手动装配 自动装配 首先写两个类Dept类和Emp类. Dept类: package com.Keafmd.spring5.autowire;/*** Keafmd** @Clas ...
- spring8: di依赖注入--构造注入
package com.atChina.Test3;public class Student {private String name;private int age;private School s ...
- 【Spring】一文带你吃透基于XML的DI技术
个人主页: 几分醉意的CSDN博客_传送门 文章目录
- Spring基于 XML 的声明式事务控制(配置方式)
一.引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- Spring 基于xml配置方式的AOP
我们具体用代码来说明: 1.ArithmeticCalculator.java 1 package com.proc; 2 3 public interface ArithmeticCalculato ...
最新文章
- Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库
- js ZeroClipboard 拷贝文本到剪贴板
- 常用的shell脚本案例(14.04.15更新)
- 设计模式- 命令模式
- 考前自学系列·计算机组成原理·中央处理器知识点
- 2020-07-01 CVPR2020 表示学习论文讨论(2) 笔记
- VMware ubuntu 上网2
- 这样的奇技淫巧不可取,切记切记
- wordpress插件-WP Rocket 3.10.1_去广告已授权
- 长文详解Attention、Seq2Seq与交互式匹配
- CRUISE软件测试工程师,CruiseControl.NET配置
- 平板电脑(台电x80HD)安装Ubuntu18.04教程- Z3735系列CPU通用
- 2021新手、小白快速安装KALI教程
- 小米系列手机(包括红米,黑鲨)开启调试模式
- paperwhite3翻页_亚马逊Kindle Paperwhite 3G / Wi-Fi评论
- P5713 【深基3.例5】洛谷团队系统(C语言)
- web程序设计(9)——编写阅读器(JQuery基础)
- 【高等数学基础进阶】导数与微分
- git上传详细步骤和提交代码的各种报错解决方式.
- Python基础之列表、元组、字典、集合的使用