您的位置:首页 > 编程语言 > Java开发

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

2017-09-28 10:29 676 查看
注: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(构造器
4000
)方式注入.由于使用的较少,简单介绍

<!--
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文件)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: