学习SSM框架笔记三:SpringIOC和DI
2017-09-28 10:29
676 查看
注:SpringIOC(控制反转)和DI(依赖注入)是Spring框架的核心内容.控制反转是目标,依赖注入是手段。
我们已经知道了Spring容器可以帮助我们创建对象,其实Spring容器还能够帮我们在类中调用其他的类。只需要通过配置文件,这样就可以实现解耦。
如果我们要初始化这些属性,有2中方法,一种是利用构造器,一种是利用set方法。
如果这些类(Person类和Eat类)是Spring容器中的bean元素,Spring也可以通过配置文件用这2中方法来初始化这些属性。
构造器的方式就是用<constructor-arg>标签,index来指定属性的序号.
4000
)方式注入.由于使用的较少,简单介绍
建议:如果使用自动装配方式注入,建议使用byName方式.因为id是唯一的,而且不会报错.
例如,在src/main/resources目录下有db.properties文件
只需要在spring.xml中这样配置,spring容器就会自动的读取文件中的内容,并得到一个bean元素
然后可以用spring表达式直接获取这个bean中的内容
格式 #{id:属性名}
String等基本类型:#{id:属性名}
List类型:#{id:属性名[下标]}
Map类型:#{id:属性名.key}(只能用于key为英文)或者 #{id:属性名['key']}(key为中英皆可以)
Properties类型:#{id:key}(只要是Properties皆可,包括注入的Properties文件)
我们已经知道了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文件)
相关文章推荐
- Spring IOC 学习笔记(一) IoC和DI概述
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)(转)
- SSM框架系列学习总结1之Spring Ioc
- Spring 4 学习笔记2:控制反转(IoC)和依赖注入(DI)
- Spring学习笔记(一)----IoC之DI
- spring学习笔记 -- day03 IOC中的bean标签、DI依赖注入
- Spring学习笔记之基础、IOC、DI(1)
- Spring学习笔记之基础、IOC、DI(1)
- Spring4 学习笔记(2)-介绍 IOC 和 DI
- 学习笔记——SSM框架(eclipse4javaee)spring-framework版本问题
- [原创]java WEB学习笔记97:Spring学习---Spring 中的 Bean 配置:IOC 和 DI
- 学习SSM框架笔记二:spring容器实例化对象的3种方法
- Spring学习笔记----01. 入门知识,IoC/DI
- Spring+SpringMVC+Mybatis框架整合例子(SSM) 学习笔记
- 学习SSM框架笔记四:Spring注解
- Maven学习笔记(五)-Maven整合SSM(spring+springMVC+Mybatis)框架
- 学习SSM框架笔记五:利用五大组件采取配置文件和SpringMVC模式写HelloWorld
- spring学习笔记:Spring IOC容器
- spring Ioc的bean的学习笔记
- Spring学习笔记-IOC概念篇