SSM三大框架从0到1,无障碍学习,萌新可入《二》

DI(依赖注入)

1.DI概念

DI即依赖注入,就是将SpringIOC创建的对象进行属性的设置。

DI有两种方式:
设置器注入
构造器注入

2.设置器注入

利用javabean的set方法进行属性注入

保证javabean的属性具有set设置器:
     特别注意,类属性 不等于 javabean的bean属性
    javabean的bean属性只看是否提供了set或get方法

a.基本类型的注入

基本数据类型、String类型性

<!--基本类型(基本数据类型、String类型)设置-->
<property name="name"value="zs"></property>
<property name="age"value="19"></property>
b.集合类型的注入
<!--集合类型-->
<property name="list">
	<list>
		<value>v1</value>
		<value>v2</value>
		<value>v3</value>
	</list>
</property>
<property name="set">
	<set>
		<value>v1</value>
		<value>v2</value>
		<value>v3</value>
		<value>v2</value>
	</set>
</property>
c.map类型注入
<!--Map类型-->
<property name="map">
	<map>
		<entrykey="k1"value="v1"></entry>
		<entrykey="k2"value="v2"></entry>
		<entrykey="k3"value="v3"></entry>
		<entrykey="k2"value="v4"></entry>
	</map>
</property>
d.Properties类型注入
<!--Properties-->
<property name="props">
	<props>
		<propkey="pk1">pv1</prop>
		<propkey="pk2">pv2</prop>
		<propkey="pk3">pv3</prop>
	</props>
</property>
e.自定义bean的注入
<bean id="dog"class="cn.xxxx.domain.Dog">
	<propertyname="name"value="旺财"></property>
	<propertyname="age"value="5"></property>
</bean>
	<bean id="cat"class="cn.xxxx.domain.Cat">
	<propertyname="name"value="汤姆"></property>
	<propertyname="age"value="4"></property>
</bean>
<bean id="hero"class="cn.xxxx.domain.Hero">
	<propertyname="name"value="亚瑟"></property>
	<propertyname="age"value="55"></property>
	<propertyname="dog"ref="dog"></property>
	<propertyname="cat"ref="cat"></property>
</bean>
f.自定义bean的注入 - 自动装配
byName根据当前bean的bean属性名寻找该id的bean进行注入
byTaype根据当前bean的bean属性类型寻找该类型的bean记性注入,这种方式如果找到多个bean则抛出异常
<bean id="dog"class="cn.xxxx.domain.Dog">
	<propertyname="name"value="旺财"></property>
	<propertyname="age"value="5"></property>
</bean>

<bean id="cat"class="cn.xxxx.domain.Cat">
	<propertyname="name"value="汤姆"></property>
	<propertyname="age"value="4"></property>
</bean>

<bean id="tiger1"class="cn.xxxx.domain.Tiger">
	<propertyname="name"value="跳跳虎"></property>
	<propertyname="age"value="9"></property>
</bean>

<bean id="tiger2"class="cn.xxxx.domain.Tiger">
	<propertyname="name"value="小帅虎"></property>
	<propertyname="age"value="8"></property>
</bean>

<!--
自动装配-自动进行自定义bean类型的属性设置byName
找到和当前bean的javabean属性名相同的id的bean,自动设置byType
找到和当前bean的javabean属性类型相同的bean,自动设置
**由于Spring容易可以配置多个id不同但类型相同的bean,所以通过ByType方式自动装配bean的时候,有可能同一个属性找到多个对应的bean,此时会抛出异常
-->

<bean id="hero"class="cn.xxxx.domain.Hero"autowire="byType">
	<propertyname="name"value="亚瑟"></property>
	<propertyname="age"value="55"></property>
	
	<!--
		<propertyname="dog"ref="dog"></property>
		<propertyname="cat"ref="cat"></property>
		<propertyname="tiger"ref="tiger"></property>
	-->
	
	</bean>

3.基于构造器的注入

有的bean没有set方法而是通过构造方法进行属性设置的,此时Spring同样支持通过构造 器进行属性注入。

package cn.xxxx.domain;

public class Person {
    private String name;
    private int age;
    private Dog dog;

    public Person() {
    }

    public Person(String name, int age, Dog dog) {
        this.name = name;
        this.age = age;
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", dog=" + dog +
                '}';
    }
}

进行配置:

<bean id="dog" class="cn.xxxx.domain.Dog">
    <property name="name" value="旺财"></property>
    <property name="age" value="5"></property>
</bean>

<bean id="person" class="cn.xxxx.domain.Person">
    <!--
        name:为构造器中的哪个名字的参数设定值
        type:为构造器中的哪个类型的参数设定值
        index:为构造器中第几个参数设定值,以0开始
        value:为该属性设定什么值
        ref:如果参数为自定义bean类型,通过ref引用自定义bean类型
    -->
    <constructor-arg name="name" type="java.lang.String" index="0" value="zs" ></constructor-arg>
    <constructor-arg name="age" value="19"></constructor-arg>
    <constructor-arg index="2" ref="dog"></constructor-arg>

</bean>

大家看到这里是不是会觉得框架不是说很方便吗?怎么这么麻烦。下次我们开始说注解方式的实现。今天先到这里,我们下次见。

                                                                         ------在下亦从文,弃武从文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值