目录
下面是学习时的一些资料和练习整理:
一、搭建Sping开发环境
所需Jar包:
配置文件(应用上下文) :
在 applicatonContext.xml 文件中,配置以下代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd ">
</beans>
二、IOC容器及Bean的配置
1、在 applicatonContext.xml 文件中通过 bean 节点来配置 bean:
配置之后,apple就代表com.zzxtit.spring01.ioc.Apple类,同理orange代表com.zzxtit.spring01.ioc.Orange类。
2、Bean属性ID:
•在 IOC 容器中必须是唯一的
•若 id 没有指定,Spring 自动将定性类名作为 Bean 的名字
3、spring 对于每一个java类,都作为bean
bean标签 引入java类
属性class 配置javabean类位置:包名+类名
id:唯一标识,可以通过id值来获取对象
init-method:当对象被spring容器初始化时,调用的初始化方法
三、Bean 在IOC 容器中 的生命周期方法
1、Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务.
2、Spring IOC 容器对 Bean 的生命周期进行管理的过程:
①通过构造器或工厂方法创建 Bean 实例
②为 Bean 的属性设置值和对其他 Bean 的引用
③调用 Bean 的初始化方法
④Bean 可以使用了
⑤当容器关闭时, 调用 Bean 的销毁方法
3、在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法.
4、在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域.
作用域 | 说明 |
Singleton | Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。 |
Prototype | 每次从容器获取bean都是新的对象。 |
Request | 每次HTTP请求都会创建一个新的Bean,该作用域只适用于WebApplicationContext环境。 |
Session | 类似Request,每次有新的会话都会创建一个新的Bean,该作用域只适用于WebApplicationContext环境。 |
四、注入依赖方式
1、属性注入。
§属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象
§属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值
2、构造器注入。
§通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。
§构造器注入在 <constructor-arg> 元素里声明属性。
§构造器注入有两种方式:
①按索引匹配入参
②按类型匹配入参
实例:applicationContext.xml 中对bean配置:
<!--
通过构造器向bean对象注入属性值
constructor-arg
两种方法注入属性值:
1>通过参数的次序
<bean id="apple" class="com.zzxtit.spring.ioc.first.Apple">
<constructor-arg index="0" value="红富士"></constructor-arg>
<constructor-arg index="1" value="红色的"> </constructor-arg>
</bean>
2>通过参数类型:
<bean id="apple" class="com.zzxtit.spring.ioc.first.Apple">
<constructor-arg type="String" value="红富士"></constructor-arg>
<constructor-arg type="String" value="红色的"> </constructor-arg>
</bean>
3>通过参数的名称:
<bean id="apple" class="com.zzxtit.spring.ioc.first.Apple">
<constructor-arg name="type" value="红富士"></constructor-arg>
<constructor-arg name="color" value="红色的"> </constructor-arg>
</bean>
-->
Apple类如下:
package com.zzxtit.spring.ioc.first;
public class Apple extends Fruit{
private String size;
private String color;
private String type;
public Apple() {
System.out.println("Apple类开始被实例化!!!");
}
public Apple(String type, String color) {
this.type = type;
this.color = color;
System.out.println("通过Apple类有参构造方法开始被实例化!!!");
}
public void init() {
System.out.println("Apple类开始被IOC容器初始化。。。。。。。。。。。。。。。");
}
public void destory() {
System.out.println("Apple类开始被IOC容器销毁。。。。。。。。。。。。。。。");
}
public void desc() {
System.out.println("这个" + type + "的苹果是:" + color + "看起来很好吃的样子!");
}
/**
* @return the size
*/
public String getSize() {
return size;
}
/**
* @param size the size to set
*/
public void setSize(String size) {
this.size = size;
}
/**
* @return the color
*/
public String getColor() {
return color;
}
/**
* @param color the color to set
*/
public void setColor(String color) {
this.color = color;
}
/**
* @return the type
*/
public String getType() {
return type;
}
/**
* @param type the type to set
*/
public void setType(String type) {
this.type = type;
}
}
五、注入依赖对象
1、基本类型对象注入:
2、若字面值中包含特殊字符,可以使用 <![CDATA[]]> 把字面值包裹起来。
3、在 Bean 的配置文件中, 可以通过 <ref> 元素或 ref 属性为 Bean 的属性或构造器参数指定对 Bean 的引用。
4、在属性或构造器里声明的 Bean 称为内部 Bean。
<!--
如果被管理的Bean没有配置ID属性,则通过其全类名获取。
scope属性:
如果没有配置scope,默认值为:singleton 则表示当前类为单例模式,在IOC容器初始化时实例化对象
当scope的值为prototype时,为多例模式,在被使用时被创建对象。
-->
六、注入集合
1、配置 java.util.List 类型或者数组的属性, 需要指定 <list> 标签。
2、配置 java.util.Set 需要使用 <set> 标签。
3、Java.util.Map 通过 <map> 标签定义, <map> 标签里可以使用多个 <entry> 作为子标签. 每个条目包含一个键和一个值。
4、使用 <props> 定义 java.util.Properties, 该标签使用多个 <prop> 作为子标签。
<bean id="collectionTest" class="com.zzxtit.spring.ioc.first.CollectionTest">
<property name="stuList">
<list>
<value>张三</value>
<value>李四</value>
<value>小强</value>
</list>
</property>
<property name="teaSet">
<set>
<value>老高</value>
<value>扎根三</value>
<value>老高</value>
</set>
</property>
<!--
<property name="scores">
<map>
<entry key="Java" value="80"></entry>
<entry key="数据结构" value="98"></entry>
<entry key="Java" value="59"></entry>
<entry key="数据库原理" value="87"></entry>
</map>
</property>
-->
<property name="scores" ref="scores">
</property>
</bean>
七、util schema 及bean之间的关系
1、使用 util schema 里的集合标签定义独立的集合 Bean,可以被公用。
2、Bean之间的关系。
(1)继承
(2)依赖:前置依赖的 Bean 会在本 Bean 实例化之前创建好,如果前置依赖于多个 Bean,则可以通过逗号,空格或的方式配置 Bean 的名称
八、P命名空间
1、为了简化 XML 文件的配置,越来越多的 XML 文件采用属性而非子元素配置信息。
2、Spring 从 2.5 版本开始引入了一个新的 p 命名空间,可以通过 <bean> 元素属性的方式配置 Bean 的属性。
3、使用 p 命名空间后,基于 XML 的配置方式将进一步简化
4、xmlns:p="http://www.springframework.org/schema/p"
在applicationContext.xml中:
<!--
通过p属性注入:
eg
如果通过P:属性注入引用类型的值,需要再后面加上 "-ref"
-->
<bean id="apple" class="com.zzxtit.spring.ioc.first.Apple" p:color="红色" p:type="普通">
</bean>
<bean id="studentPtest" class="com.zzxtit.spring.ioc.first.Student" p:teacher-ref="teacher">
</bean>
九、引入外部属性文件
1、Spring 提供了一个 PropertyPlaceholderConfigurer 的 BeanFactory 后置处理器, 这个处理器允许用户将 Bean 配置的部分内容外移到属性文件中. 可以在 Bean 配置文件里使用形式为 ${var} 的变量, PropertyPlaceholderConfigurer 从属性文件里加载属性, 并使用这些属性来替换变量.
2、Spring 还允许在属性文件中使用 ${propName},以实现属性之间的相互引用。
在applicationContext.xml中:
<!--
引入properties配置文件
-->
<context:property-placeholder location="config/DB.properties"/>
<bean id="dbUtil" class="com.zzxtit.spring.ioc.first.DBUtil">
<property name="driverName" value="${mysql_driverName}"></property>
<property name="url" value="${mysql_url}"></property>
<property name="username" value="${mysql_username}"></property>
<property name="password" value="${mysql_password}"></property>
</bean>
十、Spring表达式语言:SpEL
•Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。
•语法类似于 EL:SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL
•SpEL 为 bean 的属性进行动态赋值提供了便利
•SpEL作用:
①通过 bean 的 id 对 bean 进行引用
②调用方法以及引用对象中的属性
③计算表达式的值
④正则表达式的匹配
SpEL:引用 Bean、属性和方法
•引用其他对象或属性。
•调用其他对象的方法,还可以进行链式操作。
Spring EL Operators——SpEL 操作符
•Spring EL 支持大多数的数学操作符、逻辑操作符、关系操作符。
§ 关系操作符
包括:等于 (==, eq),不等于 (!=, ne),小于 (<, lt),,小于等于(<= , le),大于(>, gt),大于等于 (>=, ge)
§ 逻辑操作符
包括:and,or,and not(!)
§ 数学操作符
包括:加 (+),减 (-),乘 (*),除 (/),取模 (%),幂指数 (^)。