Spring-day02 基于xml的DI 属性注入(赋值)和构造注入 注入基本类型或者引用类型
Spring-day02 基于xml的DI
1.注入的分类
bean 实例在调用无参构造器创建对象后,就要对 bean 对象的属性进行初始化。初始化 是由容器自动完成的,称为注入。 根据注入方式的不同,常用的有两类:set 注入、构造注入。
1.1 set注入(掌握)
set 注入也叫设值注入是指,通过 setter 方法传入被调用者的实例。这种注入方式简单、 直观,因而在 Spring 的依赖注入中大量使用。
-
简单类型的注入
需要有set方法,没有set方法是报错的。 Bean property 'name' is not writable or has an invalid setter method

- 项目结构如下:

-
bean配置文件如下:
<?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对象 注入:就是赋值的意思 简单类型: spring中规定java的基本数据类型和String都是简单类型。 di:给属性赋值 1. set注入(设值注入) :spring调用类的set方法, 你可以在set方法中完成属性赋值 1)简单类型的set注入 <bean id="xx" class="yyy"> <property name="属性名字" value="此属性的值"/> 一个property只能给一个属性赋值 <property....> </bean> --> <bean id="myStudent" class="com.bjpowernode.ba01.Student" > <property name="name" value="李四lisi" /><!--setName("李四")--> <property name="age" value="22" /><!--setAge(21)--> <property name="email" value="lisi@qq.com" /><!--setEmail("lisi@qq.com")--> </bean> <bean id="mydate" class="java.util.Date"> <property name="time" value="8364297429" /><!--setTime(8364297429)--> </bean> </beans> -
最终运行结果如下:

注入引用类型

重点是配置文件,如下 ref
<?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对象
注入:就是赋值的意思
简单类型: spring中规定java的基本数据类型和String都是简单类型。
di:给属性赋值
1. set注入(设值注入) :spring调用类的set方法, 你可以在set方法中完成属性赋值
1)简单类型的set注入
<bean id="xx" class="yyy">
<property name="属性名字" value="此属性的值"/>
一个property只能给一个属性赋值
<property....>
</bean>
2) 引用类型的set注入 : spring调用类的set方法
<bean id="xxx" class="yyy">
<property name="属性名称" ref="bean的id(对象的名称)" />
</bean>
2.构造注入:spring调用类有参数构造方法,在创建对象的同时,在构造方法中给属性赋值。
构造注入使用 <constructor-arg> 标签
<constructor-arg> 标签:一个<constructor-arg>表示构造方法一个参数。
<constructor-arg> 标签属性:
name:表示构造方法的形参名
index:表示构造方法的参数的位置,参数从左往右位置是 0 , 1 ,2的顺序
value:构造方法的形参类型是简单类型的,使用value
ref:构造方法的形参类型是引用类型的,使用ref
-->
<!--使用name属性实现构造注入-->
<bean id="myStudent" class="com.bjpowernode.ba03.Student" >
<constructor-arg name="age" value="20" />
<constructor-arg name="school" ref="myXueXiao" />
<constructor-arg name="name" value="周良"/>
<constructor-arg name="home" ref="myjiaxiang"/>
</bean>
<!--使用index属性-->
<bean id="myStudent2" class="com.bjpowernode.ba03.Student">
<constructor-arg index="1" value="22" />
<constructor-arg index="0" value="李四" />
<constructor-arg index="2" ref="myXueXiao" />
<constructor-arg index="3" ref="myjiaxiang" />
</bean>
<!--省略index-->
<bean id="myStudent3" class="com.bjpowernode.ba03.Student">
<constructor-arg value="张强强" />
<constructor-arg value="22" />
<constructor-arg ref="myXueXiao" />
<constructor-arg ref="myjiaxiang" />
</bean>
<!--声明School对象-->
<bean id="myXueXiao" class="com.bjpowernode.ba03.School">
<property name="name" value="清华大学"/>
<property name="address" value="北京的海淀区" />
</bean>
<!--声明home对象-->
<bean id="myjiaxiang" class="com.bjpowernode.ba03.Home">
<property name="name" value="望江县"/>
<property name="address" value="安徽省安庆市望江县" />
<property name="ID" value="246240" />
</bean>
</beans>
最终结果如下:

1.2 构造注入(理解)
构造注入是指,在构造调用者实例的同时,完成被调用者的实例化。即,使用构造器设 置依赖关系。

配置文件是重点,如下:
<constructor-arg name="name" value="周良"/> -- 基本变量 <constructor-arg name="home" ref="myjiaxiang"/> -- 引用类型的变量
<?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对象
注入:就是赋值的意思
简单类型: spring中规定java的基本数据类型和String都是简单类型。
di:给属性赋值
1. set注入(设值注入) :spring调用类的set方法, 你可以在set方法中完成属性赋值
1)简单类型的set注入
<bean id="xx" class="yyy">
<property name="属性名字" value="此属性的值"/>
一个property只能给一个属性赋值
<property....>
</bean>
2) 引用类型的set注入 : spring调用类的set方法
<bean id="xxx" class="yyy">
<property name="属性名称" ref="bean的id(对象的名称)" />
</bean>
2.构造注入:spring调用类有参数构造方法,在创建对象的同时,在构造方法中给属性赋值。
构造注入使用 <constructor-arg> 标签
<constructor-arg> 标签:一个<constructor-arg>表示构造方法一个参数。
<constructor-arg> 标签属性:
name:表示构造方法的形参名
index:表示构造方法的参数的位置,参数从左往右位置是 0 , 1 ,2的顺序
value:构造方法的形参类型是简单类型的,使用value
ref:构造方法的形参类型是引用类型的,使用ref
-->
<!--使用name属性实现构造注入-->
<bean id="myStudent" class="com.bjpowernode.ba03.Student" >
<constructor-arg name="age" value="20" />
<constructor-arg name="school" ref="myXueXiao" />
<constructor-arg name="name" value="周良"/>
<constructor-arg name="home" ref="myjiaxiang"/>
</bean>
<!--使用index属性-->
<bean id="myStudent2" class="com.bjpowernode.ba03.Student">
<constructor-arg index="1" value="22" />
<constructor-arg index="0" value="李四" />
<constructor-arg index="2" ref="myXueXiao" />
<constructor-arg index="3" ref="myjiaxiang" />
</bean>
<!--省略index-->
<bean id="myStudent3" class="com.bjpowernode.ba03.Student">
<constructor-arg value="张强强" />
<constructor-arg value="22" />
<constructor-arg ref="myXueXiao" />
<constructor-arg ref="myjiaxiang" />
</bean>
<!--声明School对象-->
<bean id="myXueXiao" class="com.bjpowernode.ba03.School">
<property name="name" value="清华大学"/>
<property name="address" value="北京的海淀区" />
</bean>
<!--声明home对象-->
<bean id="myjiaxiang" class="com.bjpowernode.ba03.Home">
<property name="name" value="望江县"/>
<property name="address" value="安徽省安庆市望江县" />
<property name="ID" value="246240" />
</bean>
</beans>
运行结果如下:


浙公网安备 33010602011771号