Spring(二)【设置注入(简单类型和引用类型)& 构造注入】
bean对象的作用域:作用域是对象存在的范围和可见性:
1)单例(singleton):默认值,表示叫这个名称的对象在Spring容器中只有一个。
在创建容器对象时,容器会创建所有的单例对象,其优点是获取对象速度快
指定单例的语法:
<bean id = "xx" class = "yy" scope = "singleton"/>

通过测试控制台会发现servlet01和servlet02是同一个对象

2)原型(prototype):表示每次使用getBean()都创建一个新的对象(原型模式使用较少)
原型对象的创建是在执行getBean()方法时执行。
优点:不占内存;缺点:获取对象的速度较慢
制定原型的语法:
<bean id = "xx" class = "yy" scope = "prototype"/>
原型测试和上面的单例测试代码是一样的,得到的结果全不同,原因是每次使用getBean()的时候都创建了一个新的对象
di:依赖注入,即给属性赋值
di实现有两种语法:1)使用xml中的标签和属性,2)使用注解
di的分类:
1)设值注入:就是Spring调用类的set方法,完成赋值。(常用方式)
2)构造注入:Spring调用类的参数构造方法,完成赋值。

注意:property属性注入时,跟属性没有关系,Spring不会去找类中的属性,只会去找对应的set方法,里面的方法体Spring也不关心
设值注入的值有两种类型,分别为:简单类型和引用类型
简单类型:Spring中把String和java的基本数据类型叫做简单类型。

引用类型:引用类型的注入,使用ref来赋值
两种方式:1)<property name=属性名 ref="bean的id"/>

2)ref作为子标签

构造注入:Spring调用类的有参数构造方法,在创建对象的同时,给属性赋值
使用的标签:<constructor-arg>
<constructor-arg>表示构造方法的一个参数
属性:
1)name:表示构造方法的形参名
2)value:表示简单类型的参数值
3)index:表示构造方法的参数位置,从0开始
4)ref:引用类型的参数值

注意:如果是照形参顺序依次添加参数值,<constructor-arg>标签中的index是可以省略的
引用类型的自动注入:spring按某种规则给引用类型完成赋值,常用的方式有:
1)byName:按名称注入,java类中引用类型的属性名和spring容器中<bean>的id值一样,且数据类型一样,这样的bean能赋值给引用类型

2)byType:按类型注入,java类型中引用类型的数据类型和spring容器(xml配置文件)中<bean>的class属性值是同源关系的,这样的bean能够赋值给引用类型
同源关系:
1)java类中引用类型的数据类型和<bean>的class值是一样的。
2)java类中引用类型的数据类型和<bean>的class值父子类关系的。
3)java类中引用类型的数据类型和<bean>的class是接口和实现类关系的。
注意:在byType中,符合条件的对象只能有一个,多余一个是报错的。


浙公网安备 33010602011771号