Spring IOC 容器

目录

 

一、搭建Sping开发环境

二、IOC容器及Bean的配置

三、Bean 在IOC 容器中 的生命周期方法

 四、注入依赖方式

 五、注入依赖对象

六、注入集合 

七、util schema 及bean之间的关系

 八、P命名空间

九、引入外部属性文件 

 十、Spring表达式语言:SpEL


下面是学习时的一些资料和练习整理:

一、搭建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):是一个支持运行时查询和操作对象图的强大的表达式语言。

语法类似于 ELSpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL

SpEL bean 的属性进行动态赋值提供了便利

SpEL作用:

      ①通过 bean id bean 进行引用

      ②调用方法以及引用对象中的属性

      ③计算表达式的值

      ④正则表达式的匹配

SpEL:引用 Bean、属性和方法

引用其他对象或属性。

调用其他对象的方法,还可以进行链式操作。

 

Spring EL Operators——SpEL 操作符

Spring EL 支持大多数的数学操作符、逻辑操作符、关系操作符。

§ 关系操作符

  包括:等于 (==, eq),不等于 (!=, ne),小于 (<, lt),,小于等于(<= , le),大于(>, gt),大于等于 (>=, ge)

§ 逻辑操作符

  包括:andorand not(!)

§ 数学操作符

  包括:加 (+),减 (-),乘 (*),除 (/),取模 (%),幂指数 (^)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值