• Spring基础05——Spring依赖注入的三种方式


    Spring支持3种依赖注入的方式:属性注入、构造器注入、工厂

    1.属性注入

    属性注入即通过setter方法注入Bean的属性或依赖的对象。使用<property>元素,使用name属性指定Bean的属性名称,value 属性或<value>子节点指定属性值

    ,是实际应用当中最常用的注入方式。

    <!--配置Bean-->
        <bean id="helloWorld" class="com.wzy.lesson1.HelloWorld">
            <!--通过setName方法注入-->
            <property name="name" value="Spring"/>
        </bean>

    2.构造器注入

    通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例化后就可以使用。

    构造器注入在<constructor-arg>元素里声明属性,<constructor-arg>中没有name属性。

    1 <!--通过构造方法来配置bean的属性-->
    2     <bean id="car" class="com.wzy.lesson1.Car">
    3         <constructor-arg value="Audi" index="0"/>
    4         <constructor-arg value="ShangHai" index="1"/>
    5         <constructor-arg value="3000000" index="2"/>
    6     </bean>

    如果构造方法的参数个数相同,并且只指定了参数的顺序没有指定参数的类型,那么容器将无法区分应使用哪个构造器,就会造成错误。

     1 <!--通过构造方法来配置bean的属性-->
     2 <bean id="car" class="com.wzy.lesson1.Car">
     3     <constructor-arg value="Audi" index="0"/>
     4     <constructor-arg value="ShangHai" index="1"/>
     5     <constructor-arg value="3000000" index="2"/>
     6 </bean>
     7 
     8 <!--通过构造方法来配置bean的属性-->
     9 <bean id="car1" class="com.wzy.lesson1.Car">
    10     <constructor-arg value="Audi" index="0"/>
    11     <constructor-arg value="ShangHai" index="1"/>
    12     <constructor-arg value="200" index="2" />
    13 </bean>

    因为没有指定类型所以容器都使用了,第一个构造方法进行注入,导致本来的maxSpeed属性值注入到price当中

    在注入时我们指定注入的参数类型,来避免构造函数重载时,发生这种错误:

     1 <!--通过构造方法来配置bean的属性-->
     2 <bean id="car" class="com.wzy.lesson1.Car">
     3     <constructor-arg value="Audi" index="0" type="java.lang.String"/>
     4     <constructor-arg value="ShangHai" index="1" type="java.lang.String"/>
     5     <constructor-arg value="3000000" index="2" type="double"/>
     6 </bean>
     7 
     8 <!--通过构造方法来配置bean的属性-->
     9 <bean id="car1" class="com.wzy.lesson1.Car">
    10     <constructor-arg value="Audi" index="0" type="java.lang.String"/>
    11     <constructor-arg value="ShangHai" index="1" type="java.lang.String"/>
    12     <constructor-arg value="200" index="2"  type="int"/>
    13 </bean>

    这样我们就可以得到正确的结果:

    3.工厂方法注入(很少使用,不推荐)

  • 相关阅读:
    创建SSIS包—ETL中典型的数据清洗
    SSIS中的容器和数据流—数据转换(Transformations)
    创建SSIS包—循环和动态package
    SSIS中的容器和数据流—数据转换(Transformations)续
    创建SSIS包—建立端到端的package
    SQL点滴9—SQL Server中的事务处理以及SSIS中的内建事务
    SSIS中的容器和数据流—调试工具数据视图
    SQL点滴11—重置win7登录密码影响SQL登录
    SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比
    SSIS中的容器和数据流—举例说明数据转换任务
  • 原文地址:https://www.cnblogs.com/fengyun2019/p/10819737.html
Copyright © 2020-2023  润新知