spring依赖注入,自动转配

依赖注入的方式:属性注入,构造器注入,工厂注入


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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值