侧边栏壁纸
  • 累计撰写 93 篇文章
  • 累计创建 85 个标签
  • 累计收到 9 条评论

spring系列笔记 - 第五章 set注入详解

bearjun
2020-11-19 / 0 评论 / 0 点赞 / 751 阅读 / 4,317 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-11-19,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

  • JDK内置类型
    8种基本类型 + String、数组类型、set集合、list集合、Map计划和、Properties集合。
  • 用户自定义类型

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

<property> xxxxx </property>

2020052118232073.png

1. JDK内置类型

1.1、String和8种基本数据类型

直接使用value赋值

<value>bearjun</value> 
1.2、数组类型

标签嵌套标签

<property name="emails">
    <list>
        <value>www</value>
        <value>ccc</value>
        <value>bbb</value>
    </list>
</property>
1.3、Set集合

标签嵌套任意标签
set的值无序不可重复

<set>
    <value>111</value>
    <value>333</value>
    <value>111</value>
    <ref bean=""/>
    <set>.....</set>
</set>
1.4、List集合

标签嵌套任意标签
List集合和数组都用标签
list的值是有序的可重复的

<list>
    <value>11111</value>
    <value>2222</value>
</list>
<list>
    <ref bean="" />
    <set> ...</set>
</list>
1.5、Map集合

注意:map的key:value对应一个entry。 ->
值根据对应类型选择任意的标签。可无限套娃

<map>
    <entry>
        <key>
    	   <value>hello</value>
    	</key>
        <value>123</value>
    </entry>
    <entry>
        <key>
    	   <value>hello</value>
    	</key>
        <ref bean=""/>
    </entry>
</map>
1.6、Properties类型

Properties是一种特殊的Map,他的key是String value也是String类型
标签嵌套value标签

<props>
    <prop key="k1">value1</prop>
    <prop key="k2">value2</prop>
</props>
1.7、复杂的JDK类型

​需要程序员⾃定义类型转换器,处理。

2. ⽤户⾃定义类型

2.1 第一种方式

开发步骤:

  • 为成员变量提供set get方法
  • 配置文件中进行注入(赋值)
<bean id="userService" class="xxxx.UserServiceImpl">
    <property name="userDAO">
        <bean class="xxx.UserDAOImpl"/>
    </property>
</bean>
2.2 第二种方式

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

  • 配置文件代码冗余(很多service需要注入dao对象,就需要写多次)
  • 被注入的Dao对象,多次创建,浪费JVM内存资源

开发步骤:

  • 为成员变量提供 set get ⽅法;
  • 配置⽂件中进⾏配置;
<bean id="userDAO" class="com.bearjun.dao.UserDAOImpl"></bean>

<bean id="userService" class="com.bearjun.service.UserServiceImpl">
    <property name="userDAO">
        <ref bean="userDAO"/>
    </property>
</bean>

<bean id="xxxService" class="com.bearjun.service.xxxx">
    <property name="userDAO">
        <ref bean="userDAO"/>
    </property>
</bean>

Spring4.x 废除了 <ref local=""/> 基本等效 <ref bean=""/>

3. set注入简化写法

3.1 基于属性简化
  • JDK 类型注入:
<property name="name">
    <value>bearjun</value>
</property>
<!--简化成-->
<property name="name" value="bearjun"/>

注意:JDK类型注入简化:value 属性只能简化8种基本类型 + String 注入标签;

  • 用户自定义类型注入:
<bean id="userDAO" class="com.bearjun.dao.UserDAOImpl"></bean>

<bean id="userService" class="com.bearjun.service.UserServiceImpl">
    <property name="userDAO">
        <ref bean="userDAO"/>
    </property>
</bean>
<!--简化成-->
<bean id="userDAO" class="com.bearjun.dao.UserDAOImpl"></bean>

<bean id="userService" class="com.bearjun.service.UserServiceImpl">
    <property name="userDAO" ref="userDAO"/>
</bean>
3.2 基于p命名空间简化
  • JDK 类型注入:
<bean id="person" name="p" class="com.bearjun.basic.Person">
   <property name="id">
       <value>10</value>
   </property>
   <property name="name">
       <value>yusael</value>
   </property>
</bean>
<!--简化成-->
<bean id="person" name="p" class="com.bearjun.basic.Person">
   <property name="id" value="10" />
   <property name="name" value="bearjun" />
</bean>
<!--命名空间p进一步简化成-->
<bean id="person" name="p" class="com.bearjun.basic.Person" p:name="10" p:id="10"/>
  • 用户自定义类型注入:
<bean id="userDAO" class="com.bearjun.dao.UserDAOImpl"></bean>

<bean id="userService" class="com.bearjun.service.UserServiceImpl">
    <property name="userDAO">
        <ref bean="userDAO"/>
    </property>
</bean>
<!--命名空间p简化成-->
<bean id="userDAO" class="com.bearjun.dao.UserDAOImpl"></bean>

<bean id="userService" class="com.bearjun.service.UserServiceImpl" p:userDAO-ref="userDAO"/>
0

评论区