学习SSM框架笔记三:SpringIOC和DI

注:SpringIOC(控制反转)和DI(依赖注入)是Spring框架的核心内容.控制反转是目标,依赖注入是手段。

我们已经知道了Spring容器可以帮助我们创建对象,其实Spring容器还能够帮我们在类中调用其他的类。只需要通过配置文件,这样就可以实现解耦。


依赖注入

如果一个Person类有以下这些属性:
如果我们要初始化这些属性,有2中方法,一种是利用构造器,一种是利用set方法。
如果这些类(Person类和Eat类)是Spring容器中的bean元素,Spring也可以通过配置文件用这2中方法来初始化这些属性。

Set方式

	<bean id="person" class="spring.Person">
		<!-- 给String类型的属性赋值 -->注意:name的值虽然为属性名,其实Spring是调用了setName()方法,所以,请使用标准set方法.Spring会跟住name的值,将值得首字母大写.
		<property name="name" value="花千骨"></property>
		<!-- 给List类型的属性赋值,Set类型同理 -->
		<property name="interest">
			<list>
				<value>吃饭</value>
				<value>睡觉</value>
				<value>打豆豆</value>
			</list>
		</property>
		<!-- 给Map类型的属性赋值 -->
		<property name="score">
			<map>
				<entry key="数学" value="70"></entry>
				<entry key="English" value="80"></entry>
			</map>
		</property>
		<!-- 给Properties类型的属性赋值 -->
		<property name="properties">
			<props>
				<prop key="user">King</prop>
				<prop key="password">1234</prop>
			</props>
		</property>
		<!-- 给Eat类初始化,ref来指定Eat的bean的id -->
		<property name="eat" ref="e1"></property>
	</bean>
	<bean id="e1" class="spring.Eat"></bean>

构造器方式

<bean id="e1" class="spring.Eat"></bean>
	
<bean id="person" class="spring.Person">
	<constructor-arg index="0" value="花千骨"></constructor-arg>
	......
	<constructor-arg index="4" ref="e1"></constructor-arg>
</bean>

构造器的方式就是用<constructor-arg>标签,index来指定属性的序号.

自动装配方式

其实自动装配方式注入的本质还是set或者constructor(构造器)方式注入.由于使用的较少,简单介绍

	<!-- 
	autowire指定自动装配的规则,有这样三个值:
		byName: 容器依据属性名查找对应的bean(即bean的id等于属性名),找到之后,调用对应的set方法来完成注入。
			注:如果找不到,会注入null值。
		byType:容器依据属性类型查找对应的bean(即bean的类型与属性类型一致),找到之后,调用对应的set方法来完成注入。
			注:如果找不到,会注入null值。如果找到多个,会出错。
		constructor:类似byType,只不过会调用构造器来完成注入。
	 -->
	<bean id="rest" class="auto.Restaurant" autowire="byType"/>

建议:如果使用自动装配方式注入,建议使用byName方式.因为id是唯一的,而且不会报错.


引用的方式来注入集合类型

在注入集合的类型的时候,除了上述的两种方式,还有一种引用的方式注入,原理就是把集合配置成一个bean元素.然后直接注入bean元素就可以.
	<!-- 引用的方式注入集合类型的值 -->
	<util:list id="interest">
		<value>喝酒</value>
		<value>吸烟</value>
		<value>上网</value>
	</util:list>
	
	<util:map id="score">
		<entry key="english" value="80"/>
		<entry key="math" value="90"/>
	</util:map>
	<util:properties id="prop">
		<prop key="user">King</prop>
		<prop key="password">1234</prop>
	</util:properties>
	<bean id="person" class="spring.Person">
		<property name="interest" ref="interest"/>
		<property name="city" ref="city"/>
		<property name="score" ref="score"/>
		<property name="properties" ref="prop"/>
	</bean>

读取properties文件

在Spring容器里的直接读取properties后缀的文件,使其成为一个bean元素.
例如,在src/main/resources目录下有db.properties文件

只需要在spring.xml中这样配置,spring容器就会自动的读取文件中的内容,并得到一个bean元素
<util:properties id="db" location="classpath:db.properties"></util:properties>

然后可以用spring表达式直接获取这个bean中的内容

Spring表达式

Spring表达式用来读取一个bean元素对象中的属性,可以更方便从一个bean中获取数值,赋值给另一个bean元素.
格式 #{id.属性名}
String等基本类型:#{id.属性名}
List类型:#{id.属性名[下标]}
Map类型:#{id.属性名.key}(只能用于key为英文)或者 #{id.属性名['key']}(key为中英皆可以)
Properties类型:#{id.key}(只要是Properties皆可,包括注入的Properties文件)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值