`
Far_ranqing
  • 浏览: 10723 次
  • 性别: Icon_minigender_2
  • 来自: 保定
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多

Spring初探

Spring是什么

         Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能有EJB完成的事情。然而,Spring的用途不仅限于服务器的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

n   目的:解决企业应用开发的复杂性

n   功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

n   范围:任何Java应用

 

 

Spring特点

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

         轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布,并且Spring所需的处理开销也是微不足道的,此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

         控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoCJNDI相反——不是对象从容器中查找依赖,而是容器在对象在初始化时不等对象请求就主动将依赖传递给它。

         面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已,它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事物支持。

         容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独地示例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

         框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式的组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给你。

 

准备工作

Ø  下载SpringFramework,并解压到指定目录。

Ø  IDE(此用MyEclipse)中新建一个项目,并将Spring.jarcommons-loggin.jar将其相关类库加入项目。

构建Spring基础代码

示例基础代码包括:

1、   GreetingDao接口:

GreetingDao接口定义了一个sayGreeting()方法

package cn.csdn.dao;

	public interface GreetingDao {
		void sayGreeting();
}

 

2、   GreetingDao接口的一个实现GreetingDaoImpl

package cn.csdn.dao;
	public class GreetingDaoImpl implements GreetingDao {
		private String say;
		public GreetingDaoImpl() {}
		public GreetingDaoImpl(String say) {
		this.say = say;
		}
		public void setSay(String say) {
		this.say = say;
		}
		@Override
		public void sayGreeting() {
			// TODO Auto-generated method stub
			System.out.println("我说的是:"+say);
		}
}

 

GreetingDaoImpl中定义了一个私有的say变量。

3、   GreetingService接口继承GreetingDao接口:

 

package cn.csdn.service;
	import cn.csdn.dao.GreetingDao;
	public interface GreetingService extends GreetingDao{}

 

4、   GreetingService接口的一个实现GreetingServiceImpl

package cn.csdn.service;
	import cn.csdn.dao.GreetingDaoImpl;
	public class GreetingServiceImpl implements GreetingService {
		private GreetingDaoImpl greetingDaoImpl;
		public GreetingServiceImpl() {}
		public GreetingServiceImpl(GreetingDaoImpl greetingDaoImpl) {
			this.greetingDaoImpl = greetingDaoImpl;
		}
		public void setGreetingDaoImpl(GreetingDaoImpl greetingDaoImpl) 		{
			this.greetingDaoImpl = greetingDaoImpl;
		}
		@Override
		public void sayGreeting() {
			greetingDaoImpl.sayGreeting();
		}
	}

 

GreetingServiceImpl中定义了一个GreetingDaoImpl类型的变量

5、   Spring配置文件(bean.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"
			xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	<!—定义一个bean对象-->
	<bean id="greetingDaoImpl" class="cn.csdn.dao.GreetingDaoImpl">
	<!--bean的一个属性,并为其赋值-->
	<property name="say" value="Spring 春天"></property>
	</bean>
	<!—定义一个bean对象-->
	<bean id="greetingServiceImpl" class="cn.csdn.service.GreetingServiceImpl">
	<!--bean对象的属性,因其是GreetingDaoImpl 类型的,所以用到了fef属性-->
	<property name="greetingDaoImpl" ref="greetingDaoImpl"></property>
	</bean>
</beans>

 

文件位于src下,名为applicationContext.xml

6、   测试代码(这里用Junit测试)

import org.junit.Test;
import org.springframework.*;
import cn.csdn.service.GreetingServiceImpl;
public class GreetingText {
	@Test
	public void test(){
		//解析applicationContext.xml 文件
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		//获取JavaBean对象,需要强制造型
		GreetingServiceImpl gsi=(GreetingServiceImpl) ac.getBean("greetingServiceImpl");
		//调用方法
		gsi.sayGreeting();
	}
	
	@Test
	public void test2(){
		Resource resource=new FileSystemResource("src/applicationContext.xml");
		BeanFactory factory=new XmlBeanFactory(resource);
		GreetingServiceImpl gsi=(GreetingServiceImpl) factory.getBean("greetingServiceImpl");
		gsi.sayGreeting();
	}
}

 

输出结果:我说的是:Spring 春天

我们将applicationContext.xml中的配置稍加修改

 

<bean id="greetingDaoImpl" class="cn.csdn.dao.GreetingDaoImpl">
		<property name="say" value="Spring 春天22222"></property>
	</bean>

 

再次运行测试代码,看到:

结果:我说的是:Spring 春天22222

示例完成!

看出了什么?

仔细观察一下上面的代码,可以看到:

1、  我们的所有程序代码中(除测试代码之外),并没有出项Spring中的任何组件。

2、  GreetingDaoImplGreetingServiceImpl的属性均由Spring通过读取配置文件applicationContext动态设置。

3、  客户代码(这里就是我们的测试代码)仅仅面向接口编程,而无需知道实现类的具体名称。同时,我们可以很简单的通过修改配置文件来切换具体的底层实现类。

上面所说的这些,对于我们的实际开发有何帮助?

首先,我们的组件不需要实现框架指定的接口,因此可以轻松的将组件从Spring中脱离,甚至不需要任何修改(这在基于EJB框架实现的应用中式难以想象的)

其次,组件间的依赖关系减少,极大改善了代码的可重用性。

上面的例子中,我们通过Spring,在运行期动态将字符串“我说的是:Spring 春天”注入到GreetingDao实现类的say属性中。

Spring通过依赖注入模式,将依赖关系从编码中脱离出来,从而大大降低了组件之间的耦合,实现了组件真正意义上的即插即用。这也是Spring最具有价值的特性之一。

面向接口编程

即使没有Spring,实现面向接口的设计也不困难。Spring对于面向接口设计的意义,在于它为面向接口编程提供了一个更加自然地平台。基于Spring开发,程序员会自然而然倾向于使用接口来定义不同层次之间的关联关系,这种自发的倾向性,来自于Spring所提供的简单舒适的依赖注入实现。Spring使得接口的定义和使用不再像传统编程中那么繁琐(传统编码过程中,引入一个接口,往往也意味着同时引入一个Factory类,也许还有一个额外的配置文件及其读写代码)

 

总结:

Spring是一个从实际项目开发经验中抽取的,可高度重用的应用框架。

 

 

分享到:
评论
1 楼 hongmeikaile 2011-04-24  
 

相关推荐

    spring 初探

    标题中的“spring 初探”表明我们即将探讨的是Spring框架的基础知识。Spring是Java企业级应用开发中最常用的一个开源框架,由Rod Johnson发起,旨在简化应用程序的开发,提高组件之间的解耦。 首先,Spring框架的...

    pring初探共18页.pdf.zip

    标题中的“Spring初探共18页.pdf.zip”表明这是一个关于Spring框架的压缩文档,共有18页PDF内容。从标签“Spring初探共18页.pdf”我们可以推测,这份资料可能是一个关于Spring框架基础入门的学习资料,适合初学者。 ...

    java学习之spring2.0

    - **Spring 初探**:Spring的核心在于依赖注入(DI)和面向切面编程(AOP),提供了一个轻量级的容器来管理对象的生命周期和相互依赖关系。 - **Spring 体系**:包括Core Container(核心容器)、Data Access/...

    Spring开发指南

    在Spring初探部分,首先涉及到的是准备工作,包括安装必要的开发环境和配置工具,为构建Spring基础代码做准备。接下来,指南会介绍Spring的基础语义,特别是依赖注入(Dependency Injection,简称DI)的概念及其在...

    spring中文教程

    #### Spring初探与准备工作 Spring框架的核心在于其独特的依赖注入(DI)机制。DI允许开发者将组件之间的依赖关系外部化,从而实现组件间的解耦合,使得代码更加模块化和可测试。为了开始使用Spring,首先需要准备...

    cloud-demo第一次 SpringCloud服务拆分初探与案例解析

    SpringCloud服务拆分初探与案例解析 cloud-demo第一次 SpringCloud服务拆分初探与案例解析 cloud-demo第一次 SpringCloud服务拆分初探与案例解析 cloud-demo第一次 SpringCloud服务拆分初探与案例解析 cloud-demo第...

    spring 课件下载

    1. **Spring初探** 在这一章中,我们将从Spring框架的基础出发,介绍其诞生背景和主要目标。我们会讲解Spring如何简化Java应用的开发,以及它提供的依赖注入(Dependency Injection, DI)机制,这是Spring的核心...

    Spring 开发指南

    #### Spring初探:基础知识与构建环境 ##### 准备工作 在着手Spring Framework的开发之前,开发者需要搭建好必要的开发环境。这包括但不限于安装Java开发工具包(JDK),配置开发环境(如IDEA或Eclipse),并确保具备...

    spring 開發指南

    #### Spring初探:框架入门 - **准备工作**:在开始使用Spring框架之前,需要进行一系列的准备工作,包括环境搭建、框架下载和配置。Spring框架通常通过Maven或Gradle等构建工具进行管理,确保项目能够顺利地集成...

    Spring开发手册

    #### Spring初探 Spring框架的核心优势在于其对Java EE复杂性的简化处理,通过提供一系列的模块,如核心容器、数据访问/集成、Web、AOP、测试等,使得开发者能够专注于业务逻辑而非框架细节。本节将带领读者了解...

    Spring经典资料

    ##### Spring初探 - **准备工作**:在深入研究Spring之前,作者建议先进行一系列的准备活动,包括环境搭建、工具配置等,确保开发者能够顺利地运行和测试Spring相关的代码示例。 - **构建Spring基础代码**:这一...

    2011 经典 下载 spring中文教程(spring开发指南).pdf

    Spring初探.......................................................................................................................5 准备工作...............................................................

Global site tag (gtag.js) - Google Analytics