第4.33课 上课 框架介绍, 下载和安装, 入门示例, 配置元素

4_33

框架介绍

Spring框架介绍:Java EE开发必须要掌握的框架。

MVC框架:Spring MVC,有些公司可能用Struts 2。 甚至有些公司用自己的MVC实现, MVC框架是可选的。

持久层框架:MyBatis、Hibernate、JPA、JDBC,持久层框架的选择也很多。

中间层框架:Spring,几乎没有竞争对手。

目前,其他的Java EE框架,都会选择与Spring整合。

Spring框架是其他Java EE框架的中心。

 

百度百科介绍:

http://baike.baidu.com/link?url=Rek4yhx5tktSlPotGzzlCK5dMkncyfiDMaFecD46wySeIUSs8i6BZUi1nVOz98HYV0O-mdJz1nYPvQ8ZOg3Du_

 

Spring框架的历史:

2002年,Rod Johnson写了一本书,对以EJB为核心的Java EE平台进行批评和思考。

2003年,Rod Johnson开发了一个框架,这就是Spring。Spring的很多设计理念,其实就是起源EJB的启发。

当然,Spring更加简单易用。

 

传统的Java EE项目存在如下问题:

1. 组件之间的依赖关系:Action要调用Service的方法,Service要调用Dao的方法……这就称为依赖。比如A要调用B,称为A依赖B。

为了让A组件能调用B组件的方法,必须让A先获取B的实例。为了获取B的实例,有如下方式:

 

- 直接创建: 先new B→ 调用B的方法。

直接创建这种方式,必然导致A类与B组件的实现类(因为需要直接调用构造器)直接耦合。

如果以后项目需要升级,需要将B升级为更好的组件,此时B类需要更换,A又与B的实现类耦合,因此A也需要改。

 

- 工厂模式: A直接通过B组件的工厂来获取B组件 → 调用B的方法

A. 让A面向B的接口编程,在A的源代码中不会出现B的实现类。此时A与B的实现类进行了解耦。

B. A通过B的工厂来获取B的实例,B的创建工作交给B工厂去实现。A就不管B的创建。

 

缺点在于: 需要为B实现工厂,而且A还需要与B的工厂耦合。

 

C. Spring的IoC就可彻底解决该问题。

A组件面向B的接口编程即可,因此A可以与B的实现类分离。

程序员无需为B组件编写工厂类,因此编程更加简单。

 

2. 项目的Service、Dao组件设计——本身源自桥接模式的设计。

Service层负责业务规则的变化,Dao层负责持久化技术的变化。

目标:持久化技术的改变,只影响dao层。业务规则的改变,只影响Service。

 

 

但由于Service组件的事务控制代码——是用持久层技术API、Connection、Transacton、EntityTransaction,

这会导致当持久层技术改变时,事务控制代码要修改(业务组件依然要修改)。

 

为了彻底解决这个问题,用Spring AOP即可。

 

下载和安装

Spring的下载和安装

登录www.springsource.org下载Spring框架即可.

解压Spring框架。会得到如下文件结构:

- docs: API文档和参考手册。

- libs: 包括class文件jar包、api文档jar包、源代码jar包.

- schema:各种配置文件的XML Schema

 

- 为Java项目增加Spring的19个jar包 + commong-logging.jar包.

- 为Spring增加一个配置文件.

 下载网址(www.springsource.org)需要依赖Maven

 下载spring-framework-4.*.RELEASE-dist.zip

 

查看所有的版本:

http://repo.springsource.org/libs-release-local/org/springframework/spring/

 

下载仓库地址:

http://repo.springsource.org/libs-release-local/org/springframework/spring/4.2.5.RELEASE/spring-framework-4.2.5.RELEASE-dist.zip

 解压spring-framework-4.*.RELEASE-dist.zip

  docs(api文档与参考文档)

  libs(jar包)

  schema(约束文件)

入门示例

 拷贝jar包

 spring4配置文件

<?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-4.2.xsd">

 

 

 

 

</beans>

  bean简单配置

<!-- 配置Bean:

id : Bean的唯一标识符

class : 指定类(包名 + 类名)

-->

<bean id="userDao" class="org.it.dao.UserDao"></bean>

 

 Spring编程部分

 

 

 

  加载Spring配置文件

  获取Spring容器

   ClassPathXmlApplicationContext类路径

/** 创建Spring容器 */

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("appContext.xml");

//ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("file:c:/workspace/eclipse/spring01/src/appContext.xml");

/** 根据id从容器中获取指定的Bean */

HelloService hs = (HelloService)context.getBean("helloService");

/** 关闭Spring容器 */

context.close();

 

   FileSystemXmlApplicationContext文件系统

/** 创建Spring容器 */

FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("F:/workspace/eclipse/spring01/src/appContext.xml");

// FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:appContext.xml");

/** 根据id从容器中获取指定的Bean */

HelloService hs = (HelloService)context.getBean("helloService");

/** 关闭Spring容器 */

context.close();

  Spring容器

   BeanFactory

    ApplicationContext

ApplicationContext比BeanFactory功能更强大,它额外增加了如下功能:

-预初始化:当创建Spring容器时,ApplicationContext就会初始化容器中的所有singleton Bean

BeanFactory不会预初始化。

如果要取消ApplicationContext的预初始化,只要为bean元素增加lazy-init="true"

 

-支持国际化: ApplicationContext继承MessageSource接口,因此提供国际化支持.

国际化的本质就是查找、替换。

a.编写国际化资源文件.

b.加载国际化资源文件.

c.根据key去获取国际化消息.ApplicationContext提供了getMessage()方法.

 

-资源访问, 比如访问指定URL和文件中的内容.

 

-事件机制,很少使用.

 

-加载多个配置文件.

FileSystemXmlApplicationContext(String... configLocations):可直接传入多个配置文件.

ClassPathXmlApplicationContext(String... configLocations):也可传入多个配置文件.

 

 

配置元素

 beans配置文件根元素

beans: 它是配置文件的根元素.

 bean配置对象元素

bean: 该元素用于驱动调用构造器。默认调用无参数的构造器(即使该构造器是private也可以)

如果增加了constructor-arg,就会调用有参的构造器.

有几个constructor-arg,就调用带几个参数的构造器.

 property属性元素

property: 驱动调用settings方法.

说明:只要你会查api,看到该类有settings方法,你就可以配置对应的property元素.

 constructor-arg构造器元素

constructor-arg: 配置构造器参数.

该元素可配置type属性,如果不指定type属性,该配置参数优先被当成String处理.

 beans与bean指定属性区别

<bean .../>元素指定的属性,很多都可以在<beans.../>上指定出来.

如果在<beans.../>上指定的属性,它是全局的,对所有的Bean都有效.

如果在<bean.../>上指定的属性,只对该Bean有效,它是局部.

 

当全局、和局部冲突时,局部的取胜.

posted on 2018-01-31 22:29  東風★破  阅读(152)  评论(0)    收藏  举报

导航