Spring学习笔记(三):注入

1. 什么是注入

通过Spring⼯⼚及配置⽂件,为所创建对象的成员变量赋值
  • 为什么需要注⼊?
    通过编码的⽅式,为成员变量进⾏赋值,存在耦合
    在这里插入图片描述

2.如何进行注入[开发步骤]

  • 类的成员变量提供set get⽅法
  • 配置spring的配置⽂件
<bean id="person" class="com.baizhiedu.basic.Person">
	<property name="id">
		<value>10</value>
	</property>
	<property name="name">
		<value>xiaojr</value>
	</property>
</bean>

3.Spring注⼊的原理分析(简易版)

  • Spring通过底层调⽤对象属性对应的set⽅法,完成成
    员变量的赋值,这种⽅式我们也称之为set注⼊
    在这里插入图片描述

4.Set注⼊详解

  • 针对于不同类型的成员变量,在< property >标签,需要嵌套其他标签
    在这里插入图片描述
  1. JDK内置类型
  • String+8种基本类型
<value>suns</value> 
  • 数组
<list>
<value>suns@zparkhr.com.cn</value>
<value>liucy@zparkhr.com.cn</value>
<value>chenyn@zparkhr.com.cn</value>
</list>
  • Set集合
<set>
<value>11111</value>
<value>112222</value>
</set>
<set>
<ref bean
<set
</set>
  • List集合
<list>
<value>11111</value>
<value>2222</value>
</list>
<list>
<ref bean
<set
</list>
  • Map集合
注意: map -- entry -- key有特定的
标签 <key></key>
值根据对应类
型选择对应类型的标签
<map>
<entry>
<key><value>suns</value></key>
<value>3434334343</value>
</entry>
<entry>
<key><value>chenyn</value>
</key>
<ref bean
</entry>
</map>
  • Properites(Properties类型 特殊的Map key=Stringvalue=String
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
</props>
  • 复杂的JDK类型 (Date)需要程序员⾃定义类型转换器,处理。

5.⽤户⾃定义类型

  1. 第⼀种⽅式
  • 为成员变量提供set get⽅法
  • 配置⽂件中进⾏注⼊(赋值)
<bean id="userService" class="xxxx.UserServiceImpl">
	<property name="userDAO">
		<bean class="xxx.UserDAOImpl"/>
	</property>
</bean>
  1. 第⼆种⽅式
  • 第⼀种赋值⽅式存在的问题配置⽂件代码冗余,被注⼊的对象(UserDAO),多次创建,浪费JVM内存资源
  • 为成员变量提供set get⽅法
  • 配置⽂件中进⾏配置
<bean id="userDAO" class="xxx.UserDAOImpl"/>
<bean id="userService" class="xxx.UserServiceImpl">
	<property name="userDAO">
		<ref bean="userDAO"/>
	</property>
</bean>
#Spring4.x 废除了 <ref local=""/> 基本等效 <ref bean=""/>

6.Set注⼊的简化写法

1. 基于属性简化

JDK类型注⼊
<property name="name">
	<value>suns</value>
</property>
简化之后
<property name="name" value="suns"/>
注意:value属性 只能简化 8种基本类型+String 注⼊标签
⽤户⾃定义类型
<property name="userDAO">
	<ref bean="userDAO"/>
</property>
简化之后 <property name="userDAO" ref="userDAO"/>

2. 基于p命名空间简化

JDK类型注⼊
<bean id="person" class="xxxx.Person">
	<property name="name">
		<value>suns</value>
	</property>
</bean>
简化之后(p:就相当于property标签)
<bean id="person" class="xxx.Person" p:name="suns"/>
注意:value属性 只能简化 8种基本类型 +String 注⼊标签
⽤户⾃定义类型
<bean id="userService" class="xx.UserServiceImpl">
	<property name="userDAO">
		<ref bean="userDAO"/>
	</property>
</bean>
简化之后
<bean id="userService" class="xxx.UserServiceImpl" p:userDAO-ref="userDAO"/>

7.构造注⼊

  1. 注⼊:通过Spring的配置⽂件,为成员变量赋值
  2. Set注⼊:Spring调⽤Set⽅法 通过配置⽂件为成员变量赋值
  3. 构造注⼊:Spring调⽤构造⽅法 通过配置⽂件为成员变量赋值

开发步骤

  1. 提供有参构造⽅法
public class Customer implements Serializable {
		private String name;
		private int age;
		public Customer(String name,int age) {
			this.name = name;
			this.age = age;
	}
}
  1. Spring的配置⽂件
<bean id="customer" class="com.baizhiedu.basic.constructer.Customer">
	<constructor-arg>
		<value>suns</value>
	</constructor-arg>
	<constructor-arg>
		<value>102</value>
	</constructor-arg>
</bean>

构造⽅法重载

  1. 参数个数不同时通过控制<constructor-arg>标签的数量进⾏区分
  2. 构造参数个数相同时通过在标签引⼊ type属性 进⾏类型的区分<constructor-arg type="">
  3. 注⼊的总结
未来的实战中,应⽤set注⼊还是构造注⼊?
答案:set注⼊更多
1. 构造注⼊麻烦 (重载)
2. Spring框架底层 ⼤量应⽤了set注⼊

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值