对Spring框架的理解

来源:互联网 发布:软件检测报告模板 编辑:程序博客网 时间:2024/05/16 05:23

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架

一、Spring的作用

Spring 框架主要负责技术整合(可以整合很多技术),该框架提供控制反转(IoC)和面向切面(AOP) 机制,基于这些特性的整合,可以降低系统组件间的耦合度,便于系统组件的维护、扩展和替换。在 SSH 中,主要是利用 Spring 容器管理我们程序中的Action、DAO 等组件,通过容器的 IoC 机制,可以降低 Action、 DAO 之间的耦合度,利用 AOP 进行事务管理等共通部分的处理。 Struts2 主要是利用它的控制器,而不是标签、表达式; Hibernate 主要利用它的数据库访问。

二、Spring 的核心

Spring 框架的核心是提供了一个容器。该容器类型是 BeanFactory 或 ApplicationContext。
该容器具有以下功能:
1
容器可以创建和销毁组件对象,等价于原来“工厂”类的作用。
2
容器可以采用不同的模式创建对象,如单例模式创建对象。
3
容器具有 IoC 机制实现。
4
容器具有 AOP 机制实现。

三、Spring容器的应用

1、如何将一个 Bean 组件交给 Spring 容器

(1)Bean 组件其实就是个普通的 Java 类!
(2)方法:在 applicationContext.xml 中添加以下定义。
<bean id="标识符" class="Bean 组件类型"></bean>

2、如何获取 Spring 容器对象和 Bean 对象
(1) 实例化容器:
ApplicationContext ac=new ClassPathXmlApplicationContext("/applicationContext.xml");//去 Class 路径找
//FileSystemXmlApplicationContext("");//去指定的磁盘目录找
(2)利用 getBean("标识符")方法获取容器中的 Bean 对象。

3、如何控制对象创建的模式
Spring 支持 singleton(单例)和 prototype(原型,非单例)两种模式。默认是 singleton 模式,可以通过<bean>的 scope

属性修改为 prototype 模式。
例: <bean id="标识符" class="Bean 组件类型" scope="singleton">

</bean>
注意:对于有些项目,一个请求创建一个 Action,肯定不是单例模式,所以用 Spring 时必须指明 prototype,否则默认使用

singleton 会出问题。而 DAO中唯一的状态就是数据库连接,则可用 singleton 模式。service作为业务逻辑层,其成员变量

均为dao,还有一个封装的接口,service也为单例。

4、Bean的作用域

Bean的作用域可以通过Bean标签的scope属性进行设置,Bean的作用域包括以下几种:
(1)默认情况下scope="singleton",那么该Bean是单例,任何人获取该Bean实例的都为同一个实例;
(2)scope="prototype",任何一个实例都是新的实例;
(3)scope="request",在web应用程序中,每一个实例的作用域都为request范围;
(4)scope="session",在web应用程序中,每一个实例的作用域都为session范围;

5、Bean 对象创建的时机
(1) singleton 模式的 Bean 组件是在容器实例化时创建。
(2) prototype 模式是在调用 getBean()方法时创建。
(3) singleton 模式可以使用<bean>元素的 lazy-init="true"属性将对象的创建时机推迟到调用 getBean()方法。也可以在

<beans>(根元素)中使用 default-lazy-init="false"推迟所有单例Bean 组件的创建时机。
例:
<bean id="标识符"class="Bean 组件类型"scope="singleton" lazy-init="true"></bean>

<beans ...... default-lazy-init="false"></beans>

6、为 Bean 对象执行初始化和销毁方法
(1)初始化:

①可以利用<bean>元素的 init-method="方法名"属性指定初始化方法。
②指定的初始化方法是在构造方法调用后自动执行。若非单例模式,则每创建一个对象,则执行一次初始化方法。
注意:初始化的三种方式:写构造方法中; 或写{ (代码块)}中; Spring 框架中<bean>元素写 init-method="方法名"属性。
初始化时不能用 static{ },它是类加载调用,比创建对象要早。
(2) 销毁:

①可以利用<bean>元素的 destroy-method="方法名"属性执行销毁方法。
②指定的销毁方法是在容器关闭时触发,而且只适用于 singleton 模式的组件(只能为单例模式)。

7、Spring 中各种类型的数据注入

(1)、Bean 对象注入
<property name="属性名" ref="要注入的 Bean 对象的 id 值"></property>

(2)、基本数据的注入
<property name="属性名" value="要注入的值"></property>

(3)、集合的注入
①、List、 Set

<property name="集合属性名"><list><!-- 普通值用<value>标签, 对象用<bean>标签 --><value>集合中的值 1</value><value>集合中的值 2</value></list></property>
②Map
<property name="集合属性名"><map><!-- 普通值用<value>标签, 对象用<bean>标签 --><entry key="键 1" value="值 1"></entry><entry key="键 2" value="值 2"></entry> </map></property>
③ Properties
<property name="集合属性名"><props><prop key="键 1">值 1</prop><prop key="键 2">值 2</prop> </props></property>
④特殊用法: set 方法接收字符串,内部进行处理(如分割),再存入集合属性
<property name="集合属性名" value="字符串 "></property>
1 0