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

打印 上一主题 下一主题

主题 930|帖子 930|积分 2790

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

1.什么是注入

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

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


  • 类为成员变量提供set方法
  • 配置Spring的配置文件
  1. <bean id="person" name="p,p1" >
  2.     <property name="id">
  3. <bean id="customer" >
  4.     <constructor-arg  value="suns"/>
  5.     <constructor-arg  value="102"/>
  6. </bean><value>10</value>
  7.     </property>
  8.     <property name="name">
  9. <bean id="customer" >
  10.     <constructor-arg  value="suns"/>
  11.     <constructor-arg  value="102"/>
  12. </bean><value>xiaojr</value>
  13.     </property>
  14. </bean>
复制代码
1.3注入好处

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


第五章、Set注入详解

针对于不同类型的成员变量,在标签,需要嵌套其他标签

1.JDK内置类型

1.1 String+8种基本类型

suns
1.2 数组
  1. <list>
  2.     <value>suns@zp.com</value>
  3.     <value>lincu@zp.com</value>
  4.     <value>zhangsi@zp.com</value>
  5. </list>
复制代码
1.3 Set集合
  1. <set>
  2.     <value>1239188123</value>
  3.     <value>123813121</value>
  4.     <value>130111111</value>
  5.     <value>130111111</value>
  6. </set>
  7. <set>
  8.         <ref bean=""/> // 什么都能存
  9.         <set></set>
  10. </set>
复制代码
1.4 List集合
  1. <list>
  2.     <value>zpark</value>
  3.     <value>shangdi</value>
  4.     <value>xierq</value>
  5. </list>
  6. <list>
  7.         <ref bean=""/>
  8.         <set></set>
  9. </list>
复制代码
1.5 Map集合
  1. 注意: map -- entry -- key有特定的标签 <key></key>
  2.                         值根据对应类型选择对应类型的标签
  3. <map>
  4.     <entry>
  5. <bean id="customer" >
  6.     <constructor-arg  value="suns"/>
  7.     <constructor-arg  value="102"/>
  8. </bean><key><value>suns</value></key>
  9. <bean id="customer" >
  10.     <constructor-arg  value="suns"/>
  11.     <constructor-arg  value="102"/>
  12. </bean><value>4231324113</value>
  13.     </entry>
  14.     <entry>
  15. <bean id="customer" >
  16.     <constructor-arg  value="suns"/>
  17.     <constructor-arg  value="102"/>
  18. </bean><key><value>chenvn</value></key>
  19. <bean id="customer" >
  20.     <constructor-arg  value="suns"/>
  21.     <constructor-arg  value="102"/>
  22. </bean><ref bean=""/>
  23.     </entry>
  24. </map>
复制代码
1.6 Properites

Properties类型 特殊的Map key=String value=String
  1. <props>
  2.     <prop key="key1">value1</prop>
  3.     <prop key="key2">value2</prop>
  4. </props>
复制代码
1.7 复杂的JDK类型(Date)

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

2.1 第一种方式


  • 为成员变量提供set get方法
  • 配置文件中进行注入(赋值)
    1. <bean id="userService" >
    2.     <property name="userDao" >
    3. <bean id="customer" >
    4.     <constructor-arg  value="suns"/>
    5.     <constructor-arg  value="102"/>
    6. </bean><bean ></bean>
    7.     </property>
    8. </bean>
    复制代码
2.2第二种方式


  • 第一种赋值方式存在的问题

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

  • 为成员变量提供set get方法
  • 配置文件中进行配置
    1. <bean id="userService" >
    2.     <property name="userDao" >
    3. <bean id="customer" >
    4.     <constructor-arg  value="suns"/>
    5.     <constructor-arg  value="102"/>
    6. </bean><bean ></bean>
    7.     </property>
    8. </bean><bean id="userService" >
    9.     <property name="userDao" >
    10. <bean id="customer" >
    11.     <constructor-arg  value="suns"/>
    12.     <constructor-arg  value="102"/>
    13. </bean><bean ></bean>
    14.     </property>
    15. </bean><bean id="customer" >
    16.     <constructor-arg  value="suns"/>
    17.     <constructor-arg  value="102"/>
    18. </bean>#Spring4.x废除了,基本等效
    复制代码
3.Set注入的简化写法

3.1基于属性简化
  1. JDK类型简化
  2. <property name="name" value="suns"/>
  3. 注意:value属性 只能简化8种基本类型 + String注入标签
  4. 用户自定义类型
  5. <property name="userDao" ref="userDao"/>
复制代码
3.2 基于p命名空间简化
  1.         <bean id="person"  p:name="suns" p:id="100"/>
  2. 用户自定义类型
  3. <bean id="userDAO" />
  4. <bean id="userService"  p:userDao-ref="userDAO" />
复制代码
第六章、构造注入


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


  • 提供有参构造方法
  • Spring配置文件
  1. <bean id="customer" >
  2.     <constructor-arg  value="suns"/>
  3.     <constructor-arg  value="102"/>
  4. </bean>
复制代码
2.构造方法重载

2.1 参数个数不同时


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


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


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

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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表