美食家大橙子 发表于 2023-12-21 07:22:28

Spring5学习随笔-Set注入详解和构造注入

学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】
第四章、注入(Injection)

1.什么是注入

通过Spring工厂及配置文件,为所创建对象的成员变量赋值
1.1为什么需要注入

“通过编码的方式,为成员遍历进行赋值,存在耦合”
1.2如何进行注入[开发步骤]


[*]类为成员变量提供set方法
[*]配置Spring的配置文件
<bean id="person" name="p,p1" >
    <property name="id">
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean><value>10</value>
    </property>
    <property name="name">
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean><value>xiaojr</value>
    </property>
</bean>1.3注入好处

1.解耦合
2.Spring注入的原理分析(简易版)

https://img2023.cnblogs.com/blog/3321544/202311/3321544-20231115115010052-2036861007.png
第五章、Set注入详解

针对于不同类型的成员变量,在标签,需要嵌套其他标签
https://img2023.cnblogs.com/blog/3321544/202311/3321544-20231115115034275-777443999.png
1.JDK内置类型

1.1 String+8种基本类型

suns
1.2 数组

<list>
    <value>suns@zp.com</value>
    <value>lincu@zp.com</value>
    <value>zhangsi@zp.com</value>
</list>1.3 Set集合

<set>
    <value>1239188123</value>
    <value>123813121</value>
    <value>130111111</value>
    <value>130111111</value>
</set>

<set>
        <ref bean=""/> // 什么都能存
        <set></set>
</set>1.4 List集合

<list>
    <value>zpark</value>
    <value>shangdi</value>
    <value>xierq</value>
</list>
<list>
        <ref bean=""/>
        <set></set>
</list>1.5 Map集合

注意: map -- entry -- key有特定的标签 <key></key>
                        值根据对应类型选择对应类型的标签
<map>
    <entry>
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean><key><value>suns</value></key>
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean><value>4231324113</value>
    </entry>
    <entry>
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean><key><value>chenvn</value></key>
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean><ref bean=""/>
    </entry>
</map>1.6 Properites

Properties类型 特殊的Map key=String value=String
<props>
    <prop key="key1">value1</prop>
    <prop key="key2">value2</prop>
</props>1.7 复杂的JDK类型(Date)

需要程序员自定义类型转换器,处理。
2.用户自定义类型

2.1 第一种方式


[*]为成员变量提供set get方法
[*]配置文件中进行注入(赋值)
<bean id="userService" >
    <property name="userDao" >
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean><bean ></bean>
    </property>
</bean>
2.2第二种方式


[*]第一种赋值方式存在的问题

[*]配置文件代码冗余
[*]被注入的对象(UserDao)多次创建,浪费(JVM)内容资源

[*]为成员变量提供set get方法
[*]配置文件中进行配置
<bean id="userService" >
    <property name="userDao" >
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean><bean ></bean>
    </property>
</bean><bean id="userService" >
    <property name="userDao" >
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean><bean ></bean>
    </property>
</bean><bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean>#Spring4.x废除了,基本等效
3.Set注入的简化写法

3.1基于属性简化

JDK类型简化
<property name="name" value="suns"/>
注意:value属性 只能简化8种基本类型 + String注入标签

用户自定义类型
<property name="userDao" ref="userDao"/>3.2 基于p命名空间简化

        <bean id="person"p:name="suns" p:id="100"/>

用户自定义类型
<bean id="userDAO" />
<bean id="userService"p:userDao-ref="userDAO" />第六章、构造注入


[*]注入:通过Spring配置文件为成员变量赋值
[*]Set注入:Spring调用Set方法 通过配置文件为成员变量赋值
[*]构造注入:Spring调用构造方法 通过配置文件为成员变量赋值
1.开发步骤


[*]提供有参构造方法
[*]Spring配置文件
<bean id="customer" >
    <constructor-argvalue="suns"/>
    <constructor-argvalue="102"/>
</bean>2.构造方法重载

2.1 参数个数不同时


[*]通过控制标签的数量进行区分
2.2构造参数个数相同时


[*]通过在标签隐入 type属性 进行类型的区分
3. 注入的总结


[*]未来的实战中 ,应用set注入还是构造注入?
答案:set注入更多

[*]构造注入麻烦(重载)
[*]Spring框架底层 大量应用了 set注入

https://img2023.cnblogs.com/blog/3321544/202311/3321544-20231115115110764-1679113583.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Spring5学习随笔-Set注入详解和构造注入