2010-01-24 传智播客—spring (转载)

“你用过什么框架?我用过Srping,但不要说成我用过春!”,哈哈。刚开课,佟佟就把大家斗乐了,非常开心。佟佟这称号是同学私底下叫的,比较亲切。他无论在哪个班上课,都可以听到那个班的欢声笑语。

大名鼎鼎的Spring大家都听过,spring是一个开源框架,Spring为简化企业级应用开发而生。使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能。Spring是一个DI(依赖注入)和AOP(面向切面编程)容器框架。

Spring具体应用细节,以及与strutshibernater的整合。我们还没有学习到,今天算是Spring的基础操作和实现IOC(控制反转)以及DI(依赖注入)的原理。

JavaWEB基础学习过来的,IOCDI的实现原理非常简单,虽然他们的名字响亮。他们的实现原理,我在来传智播客之前就已经了解了:http://user.qzone.qq.com/252796718/infocenter?ptlang=2052&ADUIN=252796718&ADSESSION=1264331746&ADTAG=CLIENT.QQ.2707_Mysrv.0 

Let's begin!

一、spring框架

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。

Spring框架概述

组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

· 核心容器核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

· Spring 上下文Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDIEJB、电子邮件、国际化、校验和调度功能。

· Spring AOP通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOPSpring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

· Spring DAOJDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

· Spring ORMSpring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDOHibernate iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

· Spring Web 模块Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

· Spring MVC 框架MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSPVelocityTilesiText POI

Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web EJB)、独立应用程序、测试环境之间重用。

我们今天的重点内容是——核心容器。

二、HelloSpring

这个“HelloWorld!”的经典程序,还要引领多长时间?可能会一直下去吧。我们现在就开始编写一个SpringHelloWorld!程序,来学习一下Spring环境的搭建。

1.安装SpringEclipse插件。

2.新建立一个Java工程,在工程上右键->Spring Tools->Add Spring Project Nature

3.导入“spring-framework-2.5.6.SEC01\dist\spring.jar”和“spring-framework-2.5.6.SEC01\lib\jakarta-commons\commons-logging.jar”。我们使用的Spring的版本是2.53.0刚刚出来。但3.02.5的区别不是很大。

4.在工程中添加“HelloSpring.java”:

package cn.itcast.cc.spring;

public class HelloSpring {

private String message;

// 构造函数

public HelloSpring() {

System.out.println("HelloSpring,Construct!");

}

// Spring通过此方法注入属性值

public void setMessage(String message) {

this.message = message;

}

// 打印消息

public void hello() {

System.out.println("Hello:" + this.message);

}

}

5.在“src”目录下,新建一个“applicationContext.xml”文件。(在“src”目录上右键->New->Other->Spring->Spring Bean Definition):

xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean name="helloSpring" class="cn.itcast.cc.spring.HelloSpring">

<property name="message" value="**Spring**" />

bean>

beans>

6.添加测试类:

package cn.itcast.cc.spring;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {

public static void main(String[] args) {

// 创建应用程序环境

ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");

// 获取名称为helloSpring的Bean

HelloSpring hs = (HelloSpring) appCon.getBean("helloSpring");

// 调用Bean的方法

hs.hello();

}

}

7.控制台输出:

指定Bean的名称,可以使用name,也可以使用id。一般情况下建议使用id,因为idXML文件中是一个特殊的属性,XML会自动校验ID的唯一性。

可能通过属性的setter方法或着Bean的构造函数设置属性的值,但setter是比较常用的。使用构造函数设置属性的值,使用“<constructor-arg value="**Spring**"/>”替换“property”元素。注意一定要有与之对应的构造方法。

从刚开始的Dao接口到工厂模式再到Spring框架,都是为了实现更好的解耦。

三、Spring的配置文件

1.引用Bean

在应用中经常会遇见一个Bean实体,将另一个Bean实体做为自己的属性。那么这个属性值我们在XML文件中应该如何指定呢?Property有一个ref属性,ref属性的值设置为指定Bean元素的名称即可。

2.内部Bean

当一个Bean实体只被用作另一个Bean的属性时。我们可以将这个Bean声明为内部Bean。内部Bean无须设置它的idname值,它被做为子元素嵌入在对应property元素中。

3.继承式Bean

bean元素中“depends-on”属性用来指定父类。

Spring 允许将通用的 Bean 配置抽象出来, 组成一个父 Bean。 继承这个父 Bean Bean 称为子 Bean

Bean 从父 Bean 中继承配置, 包括 Bean 的属性和在 元素里的属性。

Bean 也可以覆盖从父 Bean 继承过来的配置。

Bean 可以作为配置模板, 也可以作为 Bean 实例。 若只想把父 Bean 作为模板, 可以设置 abstract 属性为 true, 这样 Spring 将不会实例化这个 Bean

并不是 元素里的所有属性都会被继承。 比如: autowiredependency-checkabstract 等。

也可以忽略父 Bean class 属性, 让子 Bean 指定自己的类, 而共享相同的属性配置。 但此时 abstract 必须设为 true

4.设置集合属性

经常见到Bean具有集合属性,在hibernateXML文件中也可以设置集合属性的值。

Spring 中可以通过一组内置的 xml 标签(例如: ) 来配置集合属性。

需求: 序列号生成器需要使用多个后缀。 这些后缀使用 “-” 作为分割, 附加在序列号后边。 这些后缀可以是任意的数据类型, 在拼接时将它们转换为字符串。

也可以使用“utility scheme”工具,定义可重用的集合设置,引时xml文件需要引入特定的标签库,参照下面的内容。

5.检查属性

设置Bean的“dependency-check="objects"”属性,检查bean中的所有属性是否通过setter方法注入了值。如果是通过构造方法注入,或没有注入都会抛异常。Dependency-check不检查属性值是否合法。

bean中设置“dependency-check="objects"”属性,它会检查所有属性。如果我们想要检查某一个属性怎么办?首先添加一个:

HelloSpring,Construct!

Hello:**Spring**

使用“<context:annotation-config />”时,beans的元素属性内容为:

<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />

<context:annotation-config />

<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"

xmlns:util="http://www.springframework.org/schema/util"

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-2.5.xsd

http://www.springframework.org/schema/util

http://www.springframework.org/schema/util/spring-util-2.5.xsd "

你可能感兴趣的:(Spring,Spring,Bean,框架,AOP,配置管理)