传智播客学习之Spring基础

来源:互联网 发布:java web项目开发实例 编辑:程序博客网 时间:2024/05/04 14:28

传智播客学习之Spring基础

今天和大家分享一下SSH最后一块技术——Spring

一、Spring框架概述

1.起源和背景

Rod Johson在2002年编著的《Expert one to one J2EE design and development》一书中,对Java EE正统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。以此书为指导思想,他编写了interface21框架,这是一个力图冲破Java EE传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。

传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。
  Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。

2.框架概述

Spring框架包含许多特性,并被很好地组织在六大模块中,如下:

1)IoC容器:管理对象及对象的依赖关系,相当于一个大的工厂,帮我们创建产品,组装产品。BeanFactory提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正允许从程序逻辑中分离出依赖关系和配置。而上下文提供了用一种框架风格的方式来访问对象,有些像JNDI注册表。上下文封装了beans包的功能,还增加了国际化,事件传播,资源装载以及透明创建上下文等。

2)Dao:提供了JDBC的抽象层,可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。且Spring提供了声明式事务,不仅仅实现了特定接口,而且对多有POJO都适用。

3)ORM:提供了常用的OR映射APIs的集成层,包括JPAJDOHibernateIBatis。同时可以混合使用所有Spring提供的特性进行OR映射。

4)AOPSpring提供了符合AOP Alliance规范的卖弄想切面编程实现,让我们可以定义。

5)WEB:提供了基础的针对Web开发的集成特性。

6)MVC:提供了Web应用的Model-View-Controller实现。并提供了一种清晰的分离模型,在领域模型代码和web form之间。

二、Ioc容器

SpringIoC控件主要专注于如何利用classes、对象和服务去组成一个企业级应用,通过规范的方式,将各种不同的控件整合成一个完整的应用。

 1.BeanFactoryApplicationContext

联系:ApplicationContext BeanFactory的子接口,ApplicationContext BeanFactory的扩展,功能得到了进一步增强。

区别:在实例化bean时,BeanFactory只把bean的定义信息载进来,用到的时候才实例化。而ApplicationContext在创建容器同时实例化单例bean。其次ApplicationContext提供文本信息解析工具,包括对国际化支持。提供载入文件资源的通用方法,如图片。可以向注册为监听器的bean发送事件

如何选择:BeanFactory接口擅长于处理Bean的初始化和配置,而ApplicationContext除了处理上述工作外,提供了更多基础支持,比如事务管理和AOP。一般后者作为首选。

2.简单应用

1)加入jar包以及配置文件。创建一个POJOHelloSpring.java

2)配置元数据

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

           <bean id="helloSpring" class="com.qinli.first.HelloSpring">

           <property name="str" value="Hello Spring"/>

           </bean>

      </beans>

3)实例化容器

可以通过如下三种方式得到应用上下文

ClassPathXmlApplicationContext:从类路径中加载。

FileSystemXmlApplicationContext:从文件系统加载。

XmlWebApplicationContext:web系统中加载。

ApplicationContext ac = new ClassPathXmlApplicationContext(

"applicationContext.xml");

4)获得Bean对象,调用相关方法和属性

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

System.out.println(hs.sayHello());

原创粉丝点击