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中,符合条件的对象只能有一个,多余一个是报错的。

 

 

  

 

posted @ 2020-04-22 21:48  Rhettttt  阅读(1163)  评论(0)    收藏  举报