Spring使用配置文件注意事项

"本文介绍了Spring框架中两种常见的属性注入方式:set注入和构造器注入。set注入需要目标类的属性有set方法,而构造器注入则要求类有对应的构造函数。通过示例配置文件展示了如何使用这两种方式注入属性,包括基本类型、集合、Map和另一个Bean的引用。同时,提到了自动注入的选项,如autowire="byName"和"byType",以及它们的区别和注意事项。"
摘要由CSDN通过智能技术生成

用Spring来管理项目中的类的创建的时候,可以使用set注入。这种方式需要目标类的属性有setXxx()方法,不然会报错。以下是项目结构和配置文件使用set注入的代码。

UserSet.xml的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--手动一个个的配置属性,通过它们的setXxx()方法设置属性值-->
    <bean id="user1" class="com.huchaun.pojo.User">
        <property name="id" value="1"/>
        <property name="name" value="胡川"/>
        <property name="age" value="21"/>

        <property name="address" ref="address"></property>

        <property name="hobby">
            <list>
                <value>下棋</value>
                <value>王者荣耀</value>
                <value>和平精英</value>
            </list>
        </property>

        <property name="card">
            <map>
                <entry key="card" value="510525222222222222"></entry>
            </map>
        </property>

        <property name="info">
            <props >
                <prop key="username">admin</prop>
                <prop key="password">admin</prop>
            </props>
        </property>

        <property name="wife">
            <null/>
        </property>
    </bean>

    <bean id="address" class="com.huchaun.pojo.Address">
        <property name="address" value="四川"/>
    </bean>
</beans>

第二种方法是使用构造器注入,需要注意的是使用这种方法需要有对应的构造器,没有对应的构造器会提示错误。还有就是这里的name的值对应的是构造器里的形参名,不要写成属性名。代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--通过构造器注入属性值,需要注意的是该实体类需要一个无参构造和有参构造-->
    <bean id="user1" class="com.huchaun.pojo.User">
        <constructor-arg name="id" value="1"/>
        <constructor-arg name="name" value="胡川"/>
        <constructor-arg name="age" value="20"/>
        <constructor-arg name="address" ref="address"/>
        <constructor-arg name="Hobby">
            <list>
                <value>下棋</value>
                <value>和平精英</value>
            </list>
        </constructor-arg>

        <constructor-arg name="card">
            <map>
                <entry key="card" value="510525222222222222"></entry>
            </map>
        </constructor-arg>
        <constructor-arg name="info">
            <props>
                <prop key="username">admin</prop>
                <prop key="password">123456</prop>
            </props>
        </constructor-arg>
        <constructor-arg name="wife" value=""/>
    </bean>

    <bean id="address" class="com.huchaun.pojo.Address">
        <property name="address" value="四川泸州"/>
    </bean>
</beans>

需要知道的是,当属性中有另一个Class对象的情况下,可以显示的指定该属性对应的bean标签的id。不论是set注入还是构造器注入都一样。代码如下:

<!--set注入-->   
<property name="address" ref="address"></property>



<!--构造器注入-->
<constructor-arg name="address" ref="address"/>

当然,也可以在bean标签中隐式的声明属性的自动注入 autowire="byName" ,其中的参数还可以是其它的。我个人比较喜欢byName,因为用byType的话如果一个类有多个不同的bean,byType处理可能会出错。需要注意的是,如果该类有toString()的话,需要处理输出语句,因为可能会出现属性.toString()中的属性为null。

byName : 通过bean标签的id进行属性注入。

byType : 通过bean标签的class的值和属性的值匹配来进行属性值的注入,这种方式不能用于有多 个相同class的bean标签,哪怕是在不同的配置文件也不可以。

constuctor : 这种表示byName和byType的组合,两个都匹配,才进行属性值的注入。

可以选择的参数如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

soutv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值