目录
使用spring创建对象的方法可参考:Spring初使用:使用Spring创建对象
为基本类型(及其包装类)属性赋值
先巩固一下有哪些基本数据类型,一共有8类,字符类:char,布尔类:boolean,数值类:byte,short,int,long,float,double,对应包装类分别为:Char,Boolean,Byte,Short,Integer,Long,Float,Double
通过xml配置文件的方式
使用Set方法赋值
创建Student类和各属性Set方法
创建spring配置文件
在创建对象的 bean 标签中使用 property 标签为属性赋值,一个 property 标签对应一个属性
格式:<property name="属性名" value="属性值"></property>
测试类测试
注意:使用property标签时,spring会默认调用属性的Set方法,如果属性没有Set方法,程序会报错:
使用有参构造方法赋值
创建Student类和有参构造方法
创建spring测试文件
在创建对象的 bean 标签中使用 constructor-arg 标签为属性赋值,一个 constructor-arg 标签对应一个属性
格式:
1.<constructor-arg name="构造方法中的形参名" value="形参值"/>
2.<constructor-arg index="构造方法中形参的下标(从0开始)" value="形参值" />
3.<constructor-arg value="形参值" />
格式1:
格式2:
格式3:
测试类测试
通过注解的方式
使用 @Value 注解赋值
创建Student类
添加注解
格式:@Value(属性值),注解写到属性的上面
注意:要使用注解的方式给属性赋值,就要使用注解的方式创建对象(步骤可参考:Spring初使用:使用Spring创建对象)
创建spring配置文件
测试类测试
为引用类型属性赋值
当我们的对象中有引用类型的属性时,比如我们定义一个 School类和一个 Student类,我们在 Student类中定义一个 School类型的属性 school,我们怎样使用spring为这个school属性赋值呢?
School类
Student类
指定赋值
使用Set方法赋值
为属性创建Set方法
School类
Student类
创建spring配置文件
在创建对象的 bean 标签中使用 property 标签为引用类型属性赋值,一个property标签对应一个引用类型属性
格式:<property name="引用类型属性名" ref="引用类的对象名"/>
测试类测试
注意:使用property标签时,spring会默认调用属性的Set方法,如果属性没有Set方法,程序会报错:
使用有参构造方法赋值
School类
添加有参构造方法
Student类
创建spring配置文件
在创建对象的 bean 标签中使用 constructor-arg 标签为引用类型属性赋值,一个constructor-arg标签,对应构造方法中的一个形参
格式:<constructor-arg name="构造方法中的形参名" ref="引用类的对象名"/>
测试类测试
自动赋值
自动赋值通过两种方式来选择对象:byName 和 byType
byName是当引用类型属性的属性名和xml配置文件中创建的对象名相同且数据类型和对象数据类型一致时,spring会选择该对象来完成自动赋值
byType可以分为三种情况
1.当引用类型属性的数据类型和xml配置文件中创建的对象数据类型一致时,spring会选择该对象完成自动赋值
2.当引用类型属性的数据类型和xml配置文件中创建的对象数据类型是父类和子类的关系时,spring会选择该对象完成自动赋值
3.当引用类型属性的数据类型和xml配置文件中创建的对象数据类型是接口和实现类的关系时,spring会选择该对象完成自动赋值
使用Set方法自动赋值
byName
创建类及Set方法
School类
Student类
创建spring配置文件
格式:<bean id="对象名" class="类的全路径" autowire="byName"></bean>
此时spring会按照byName方式自动从xml文件中选择对象来完成对Student类中school属性的赋值
测试类测试
byType
引用类型属性的数据类型和对象的数据类型相同
创建类及Set方法
School类
Student类
创建spring配置文件
格式:<bean id="对象名" class="类的全路径" autowire="byType"></bean>
此时spring会按照byType方式自动从xml文件中选择对象来完成对Student类中school属性的赋值
测试类测试
引用类型属性的数据类型和对象的数据类型为父类和子类关系
创建MiddleSchool类继承School类
Student类
创建spring配置文件
此时引用类型属性的数据类型和创建的对象的数据类型为父类和子类关系
测试类测试
引用类型属性的数据类型和对象的数据类型为接口和实现类的关系
接口和实现类关系的就不做演示了
使用注解自动赋值
使用 @Resource 注解自动赋值
使用@Resource注解为引用类型属性赋值时,默认使用byName()方式,如果byName方式赋值失败,再使用byType()方式进行赋值,也可以通过在@Resource注解中添加name属性【@Resource(name=对象名)】设置为只允许使用byName方式
创建Student类
创建School类
添加注解
格式:@Resource 或 @Resource(name = 对象名) ,注解写到引用类型属性的上面
注意:要使用注解的方式给属性赋值,就要使用注解的方式创建对象(步骤可参考:Spring初使用:使用Spring创建对象
创建spring配置文件
测试类测试
使用 @Autowired 注解自动赋值
使用@Autowired注解为引用类型属性赋值时,默认使用byType方式,可以通过注解 @Qualifier(对象名) 修改为byName方式
创建Student类
创建School类
添加注解
格式:@Autowired,注解写到引用类型属性的上面
注意:要使用注解的方式给属性赋值,就要使用注解的方式创建对象(步骤可参考:Spring初使用:使用Spring创建对象
创建spring配置文件
测试类测试
@Autowired注解中的required属性
required属性有两个值:true和false
required = false:如果使用@Autowired注解给引用类型属性赋值时没有找到相应的对象,自动赋值失败,程序可以继续执行,此时引用类型属性的值为null
创建对象并赋值
创建spring配置文件
测试类测试
成功创建对象,但赋值失败,此时引用类型属性值为null
required = true:如果使用@Autowired注解给引用类型属性赋值时没有找到相应的对象,自动赋值失败,程序会报错并终止运行
创建对象并赋值
创建spring配置文件
测试类测试
成功创建对象,但赋值失败,此时程序报错并终止运行