写点什么

【Spring 工厂】注入详解 — Set 注入(JDK 内置类型

  • 2021 年 11 月 11 日
  • 本文字数:2081 字

    阅读完需:约 7 分钟


String+8 种基本类型

<property name="id">


<value>10</value>


</property>


<property name="name">


<value>yusael</value>


</property>

数组

<property name="emails">


<list>


<value>abc@qq.com</value>


<value>123@qq.com</value>


<value>hello@qq.com</value>


</list>


</property>

Set 集合

<property name="tels">


<set>


<value>138xxxxxxxxxx</value>


<value>139xxxxxxxxxx</value>


</set>


</property>

List 集合

<property name="addresses">


<list>


<value>China</value>


<value>Earth</value>


<value>hell</value>


</list>


</property>

Map 集合

<property name="qqs">


<map>


<entry>


<key><value>hello</value></key>


<value>12312312312</value>


</entry>


<entry>


<key><value>world</value></key>


<value>21314214214</value>


</entry>


</map>


</property>

Properites

<property name="p">


<props>


<prop key="key1">value1</prop>


<prop key="key2">value2</prop>


<prop key="key3">value3</prop>


</props>


</property>

复杂 JDK 类型(Date、…)

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


用户自定义类型



第一种方式

[开发步骤]:


  • 为成员变量提供 set get 方法

  • 配置文件中进行注入(赋值)


<bean id="userService" class="com.yusael.service.UserServiceImpl">


<property name="userDAO">


<bean class="com.yusael.dao.UserDAOImpl"/>


</property>


</bean>

第二种方式

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


  1. 配置文件代码冗余;

  2. 被注入的对象 (UserDAO)多次创建,浪费(JVM)内存资源。


[开发步骤]:


  • 为成员变量提供 set get 方法;

  • 配置文件中进行配置;


<bean id="userDAO" class="com.yusael.dao.UserDAOImpl"></bean>


<bean id="userService" class="com.yusael.service.UserServiceImpl">


<property name="userDAO">


<ref bean="userDAO"/>


</property>


</bean>


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


Set 注入的简化



基于属性的简化

JDK 类型注入:


<property name="id">


<value>10</value>


</property>


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


<property name="id" value="10"/>




用户自定义类型注入:


<bean id="userDAO" class="com.yusael.dao.UserDAOImpl"></bean>


<bean id="userService" class="com.yusael.service.UserServiceImpl">


<property name="userDAO">


<ref bean="userDAO"/>


</property>


</bean>


用户自定义类型注入简化:


<bean id="userDAO" class="com.yusael.dao.UserDAOImpl"></bean>


<bean id="userService" class="com.yusael.service.UserServiceImpl">


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


</bean>

基于 p 命名空间的简化

JDK 类型注入:


<bean id="person" name="p" class="com.yusael.basic.Person">


<property name="id">


<value>10</value>


</property>


<property name="name">


<value>yusael</value>


</property>


</bean>


JDK 类型注入 - 基于 p 命名空间的简化。


<bean id="person" name="p" class="com.yusael.basic.Person"


p:name="yusael" p:id="10"/>




用户自定义类型注入:


<bean id="userDAO" class="com.yusael.dao.UserDAOImpl"></bean>


<bean id="userService" class="com.yusael.service.UserServiceImpl">


<property name="userDAO">


<ref bean="userDAO"/>


</property>


</bean>


用户自定义类型注入 - 基于 p 命名空间的简化。


<bean id="userDAO" class="com.yusael.dao.UserDAOImpl"></bean>


<bean id="userService" class="com.yusael.service.UserServiceImpl"


p:userDAO-ref="userDAO"/>


构造注入


=======================================================================


  • 注入:通过 Spring 的配置文件,为成员变量赋值;

  • Set 注入:Spring 调用 Set 方法 通过 配置文件 为成员变量赋值;

  • 构造注入:Spring 调用 构造方法 通过 配置文件 为成员变量赋值;


构造注入开发




  • 提供有参构造方法


public class Customer {


private String name;


priva


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


te int age;


public Customer(String name, int age) {


this.name = name;


this.age = age;


}


@Override


public String toString() {


return "Customer{" +


"name='" + name + ''' +


", age=" + age +


'}';


}


}


  • spring 配置文件


<bean id="customer" class="com.yusael.constructor.Customer">


<constructor-arg>


<value>zhenyu</value>


</constructor-arg>


<constructor-arg>


<value>21</value>


</constructor-arg>


</bean>


构造方法重载



参数个数不同

参数个数不同时,通过控制 <constructor-arg> 标签的数量进行区分;


如果只有一个参数的话,只需要一对 <constructor-arg> 标签:


<bean id="customer" class="com.yusael.constructor.Customer">


<constructor-arg>


<value>zhenyu</value>


</constructor-arg>


</bean>


如果有两个参数的话,用两对 <constructor-arg> 标签,以此类推。


<bean id="customer" class="com.yusael.constructor.Customer">


<constructor-arg>


<value>zhenyu</value>


</constructor-arg>


<constructor-arg>


<value>22</value>


</constructor-arg>


</bean>

评论

发布
暂无评论
【Spring 工厂】注入详解 — Set注入(JDK内置类型