spring依赖注入,自动转配

来源:互联网 发布:音乐巅峰知乎 编辑:程序博客网 时间:2024/06/11 20:19
依赖注入的方式:属性注入,构造器注入,工厂注入


package cn.et.demo1;


public class A {
        private String name;


        public String getName() {
            return name;
        }


        public void setName(String name) {
            this.name = name;
        }
        
}


package cn.et.demo1;


public class B {
    private A a;


    public A getA() {
        return a;
    }


    public void setA(A a) {
        this.a = a;
    }


}


1)属性注入:
<!-- id:类实例的名字 class:类的路径,包名.类名-->
    <bean id="a" class="cn.et.demo1.A">

    <!-- 给类中的属性赋值,name:属性名, value:赋给属性的值 -->
<property name="name" value="ssg"></property>

<!-- 等同
<property name="name" >
<value>ssg</value>
</property>
-->
    </bean>
      
    <bean id="b" class="cn.et.demo1.B"></bean>
      
    <!-- 给类中的类属性赋值 -->
<bean id="bb" class="cn.et.demo1.B" >

<!-- ref:类对象  value:基本类型的值,数字,字符等 -->
<property name="a" ref="a"></property>

<!--  等同
<property name="a">
<ref bean="a"/>
</property>
-->
</bean>

2)构造器注入:


package cn.et.demo2;


public class D {
    private C c;


    private String id;
    private String name;
    public D(C c, String id, String name) {
        super();
        this.c = c;
        this.id = id;
        this.name = name;
    }
    public C getC() {
        return c;
    }


    public String getId() {
        return id;
    }


    public String getName() {
        return name;
    }
  
}
package cn.et.demo2;


public class C {
        private String name;


        public String getName() {
            return name;
        }


        public void setName(String name) {
            this.name = name;
        }     
}


<bean id="c" class="cn.et.demo2.C">
<property name="name" value="aa"></property>
</bean>

<!-- 构造器注入 -->
<bean id="d"  class="cn.et.demo2.D">
<!-- 给构造器的属性赋值 -->
<!-- 根据构造器中的参数索引来赋值,索引从0开始,赋值顺序不能变 
<constructor-arg index="0" value="1"></constructor-arg>
<constructor-arg index="1" value="ssg"></constructor-arg>
<constructor-arg index="2" ref="c"></constructor-arg>
-->
<!-- 根据构造器中的参数名来赋值 -->

<constructor-arg name="id" value="1"></constructor-arg>
<constructor-arg name="name" value="ssg"></constructor-arg>
<constructor-arg name="c" ref="c"></constructor-arg>

<!--  根据构造器中参数的类型赋值,可以根据参数类型的不同打乱顺序赋值,但同一类型的参数不能打乱顺序赋值
<constructor-arg type="java.lang.String" value="ssg"></constructor-arg>
<constructor-arg type="cn.et.demo2.C" ref="c"></constructor-arg>
<constructor-arg type="java.lang.String" value="1"></constructor-arg>
-->
</bean>


自动装配:
java类:A,B


<!-- 
自动转配:autowire
1) autowire="byType" 根据类型,自动导入需要的类属性,如果定义的类属性是单个,导入的类属性有>=2个类实例,报错
如果定义的类属性是集合,导入的类属性有>=2个类实例没问题
2) autowire="byName" 根据类中定义的类属性的名字,如果bean中有>=2的类属性的实例,报错
-->
<bean id="b" class="cn.et.demo3.B" autowire="byName"></bean>
原创粉丝点击