`

【SSH进阶之路】Spring简介,搭建Spring环境——轻量级容器框架(一)

阅读更多

经过对Struts和Hibernate的学习,我们严寒的冬季(Hibernate),终于迎来了阳光灿烂的春天(Spring)。在系列博客开篇【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一),我们介绍了Spring的基本概念,以及比较重要的两大核心IoC和AOP,基本上介绍的比较简单,一句话带过。从这篇博客开始,我们开始重新介绍Spring框架的基本理论,并搭建一个简单的Spring开发环境。

Spring是什么?

 

Spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注入)和AOP(面向切面编程),所以spring既是一个IoC容器,也是一个AOP框架。知道了什么是Spring是学习的开端,下面说一下为什么使用Spring。

 

为什么使用Spring?

 

我们知道没有Spring,Struts和Hibernate可以很好的工作,在开篇中我把没有Spring的架构称为“独木桥”,有Spring的架构称为“阳光大道”。说白了,Spring解决了企业应用开发的复杂性,用基本的javaBean来完成EJB的事情,从大小和开销方向说,Spring都是轻量级的。Spring具有很多的优点:

 

1、使我们的分层更好。

SSH框架系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。

从上图我们可以看到Spring处于业务逻辑层,担任连接Struts和Hibernate桥梁的角色。系统的整个层次关系可以一目了然。


2、对象管理更好。

从上图,我们看到Spring将Transactions、Session以及业务层服务都放到了业务逻辑层来管理。系统的条理变得更加清晰,不仅使持久化层的职责更加单一,而且提高了系统的灵活性。

3、AOP

面向切面编程,AOP让开发人员创建非行为性的关注点,并将它们插入到应用代码红。公共服务(比如日志、持久性、事务等)就可以就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。

 

4、IoC

IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

 

用途

 

对于Spring的用途很多,但是Spring的核心和经典我们可以简化为三部分:

1、IoC容器可以将对象之间的依赖关系交由Spring管理,进行控制。

2、AOP方便进行面向切面编程,是oop的扩展,想加什么功能直接加。

3、能够集成各种优秀的框架,struts、Hibernate等等,还有很多,不再一一罗列。

 

架构图

 

 

相信你能看出来这是Spring的架构图,Spring包含了许多的特性,其实都包含在六个模块中:Core、AOP、DAO、ORM、JEE和Web,其实我们对它们并不陌生,当你学习或使用Spring时,至少已经使用了三部分的内容:DAO、ORM(对象关系映射)、Web。下面我们逐个看一下:

1、DAO

DAO框架封装了所有的数据库访问的操作,Spring提供了对DAO的支持,还有模版jdbc,进一步封装了jdbc。不管是Spring jdbc还是各种ORM框架(Hibernate、iBatis、MyBatis),它们都对JDBC做了进一步的封装,使数据访问层的操作更加灵活、易用。当然,它们也各有各的优缺点,在项目技术选型时非常重要的一项。同时,Spring还可以集成第三方的框架。

 

2、ORM

Spring提供了对ORM框架的支持,能够集成大多主流的ORM框架。JPA是一个java持久化注解的规范,Hibernate是一种对JPA的实现。TopLink是Oracle的一个ORM框架;JDO是sun公司的一个规范。OJB是appach的。IBatis不是严格意义上的ORM,ORM一般是对云数据的映射,描述类和属性,它是基于SQL的映射器。由于ORM框架层出不穷,种类繁多,大家可以自行查一下它们是哪个公司的产品,以及各自优缺点等等。

 

3、Web

Spring不仅具有自己的表示层SpringMVC,同上面一样,它还也可以支持第三方的表示层框架struts,webwork,以及一些第三方的工具。

 

这篇博文,我们剩下Spring最核心的三部分,后面的博文我会一一详细介绍。下面我们搭建一个Spring的添加用户的开发环境:

 

搭建Spring开发环境


1、下载SpringFramework,并解压缩到指定目录。我使用的是Spring3.2.9,使用哪个版本无所谓只要将jar加入到项目即可。

2、在IDE中新建一个java项目,并将Spring所需jar加入到项目中,我所用IDE为MyEclipse。

3、Spring采用Apache common_logging,并结合Apache log4j作为日志输出组件。为了在调试过程中能观察到Spring的日志输出,在CLASSPATH中新建log4j.properties配置文件,内容如下:

<span style="font-size:12px;">log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n</span>

4、提供Spring配置文件applicationContext.xml。

5、编写代码

 

配置完成之后,目录结构如下图所示:

 

UserDao接口

public interface UserDao {
	public void addUser(String userName,String password);
}

UserDao的实现

UserDao4MysqlImpl

public class UserDao4MySqlImpl implements UserDao {
	public void addUser(String userName,String password){
		System.out.println("UserDao4MySqlImpl.addUser()");
		System.out.println("userName="+userName);
		System.out.println("password="+password);
	}
}

UserDao4Oracelmpl

<span style="font-size:12px;">public class UserDao4OracleImpl implements UserDao {
	public void addUser(String userName,String password){
		System.out.println("UserDao4OracleImpl.addUser()");
		System.out.println("userName="+userName);
		System.out.println("password="+password);
	}
}</span>

UserManager接口

public interface UserManager {
	public void addUser(String userName,String password);
}

UserManager的实现

import com.liang.spring.dao.UserDao;

public class UserManagerImpl implements UserManager {
	//定义一个成员变量,使用构造方式赋值
	private UserDao userDao;
	
	public UserManagerImpl(UserDao userDao) {
		this.userDao = userDao;
	}
	/**
	 * set注入
	 * @param userDao
	 */
//	public void setUserDao(UserDao userDao) {
//		this.userDao = userDao;
//	}

	@Override
	public void addUser(String userName, String password) {
		userDao.addUser(userName, password);
	}

}

客户端

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.liang.spring.manager.UserManager;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//由我们的应用程序负责服务(对象)定位
		//这是一个组装过程,userManager用userDao,这种关系是用程序描述的,现在用配置文件描述
		//UserManager userManager = new UserManagerImpl(new UserDao4MySqlImpl());
		//userManager.addUser("张三", "123");
		
		//BeanFactory是一个接口,有不同的实现,ClassPathXmlApplicationContext是对beanFactory的实现
		//把applicationContext.xml读进来
		BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");

		//ApplicationContext都实现了beanFactory的接口
		//ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//getBean加产品标识,相当与userManager的实现,再转化为userManager的接口
		UserManager userManager =(UserManager)factory.getBean("userManager");
		userManager.addUser("jiuqiyuliang", "123456");
	}

}

Spirng的配置文件:applicationContext.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"
	     xmlns:aop="http://www.springframework.org/schema/aop"
	     xmlns:tx="http://www.springframework.org/schema/tx"
	     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

	<!-- id是唯一性标识,不能重-->
	<!--  相当于工厂一样-->
	<bean id="userDao4Mysql"  class="com.liang.spring.dao.UserDao4MySqlImpl"></bean>
	<bean id="userDao4Oracle"  class="com.liang.spring.dao.UserDao4OracleImpl"></bean>
	<!-- userManager使用userDao接口,userDao使用构造函数将依赖关系给userManager-->
	<!-- userManager依赖哪写dao,IoC容器不仅是一个工厂,它提供了管理依赖的能力。
	 -->
	<bean id="userManager" class="com.liang.spring.manager.UserManagerImpl">
		<!-- 使用的构造函数,描述了一个种依赖关系。userManager依赖于Mysql的实现
		容器提供了查找能力,找到之后new好,之后会给userManager,放到userManager的过程
		为DI,依赖注入。(主动注入)-->
		<constructor-arg ref="userDao4Mysql"></constructor-arg>
		<!--或
		<constructor-arg ref="userDao4Oracle"></constructor-arg>
		-->
		 
	</bean>
</beans>

在上面的配置文件中可以自由的切换各种数据库的实现,DAO层的灵活性可想而知。

 

项目的测试结构:

 

大家对于不明白的地方看代码中的注释即可,我给大家提供两个版本的源码:

Spring2与源码

Spring3.2.9与源码

 

总结

 

最后,今天先介绍这么多,我们对于Spring的认识才刚刚开始,仅是冰山一角。对于Spring,我更喜欢用下面的八个字形容:海纳百川,有容乃大。

下篇博文介绍IoC的几种注入方式,谢谢关注。

 

分享到:
评论
1 楼 YaphestLJ 2015-07-24  
         

相关推荐

    轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发电子书1

    《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发电子书1》是一本专注于Java EE企业级应用开发的书籍,主要涵盖了Struts 2、Spring和Hibernate这三个流行开源框架的整合应用。这本书对于Java...

    [轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发

    【轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发】这个主题主要涉及的是Java EE领域中的三大框架——Struts2、Spring3和Hibernate的集成应用,这是构建现代Java后端系统的一种常见方式。这些框架...

    JavavEE轻量级框架Struts2+Hibernate+Spring整合开发

    JavaEE轻量级框架Struts2、Hibernate和Spring的整合开发是现代企业级应用开发中的常见模式,这种组合被称为SSH(Struts2、Spring、Hibernate)框架。这三种技术分别承担了不同职责,共同构建了一个高效、灵活且可...

    ssh三大轻量级框架整合.doc

    SSH整合指的是将Spring、Struts和Hibernate这三大Java轻量级框架集成在一起,用于构建高效、灵活的企业级Web应用程序。Spring作为一个全能型框架,提供了解决业务逻辑、数据访问和控制层集成的全面解决方案;Struts...

    SSH总结之Spring

    Spring框架是一个开源的轻量级企业级应用框架,主要由核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、测试、消息和REST等功能模块组成。Spring的核心特性包括控制反转(IoC)和面向切面编程(AOP),它简化了...

    基于Struts_Hibernate_Spring的轻量级J2EE框架

    - **Spring**:Spring框架是一个轻量级的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,它支持多种模块化编程方式,包括但不限于依赖注入(DI)、面向切面编程等,旨在简化Java应用的开发...

    轻量级JAVAEE企业应用实战ssh2整合开发

    《轻量级JAVAEE企业应用实战SSH2整合开发》是一本深入浅出的教程,主要讲解如何使用Struts2、Hibernate和Spring这三大框架(SSH)进行集成开发,以实现高效、灵活的企业级应用程序。第二版针对初学者和有一定经验的...

    Eclipse搭建SSH框架开发学习笔记

    Tomcat是一款轻量级的Java Servlet容器,用于部署和运行Java Web应用程序。在Eclipse中配置Tomcat,需要在Eclipse的Server视图中添加新的服务器实例,指向Tomcat的安装目录,并配置相应的端口和工作目录。此外,还...

    轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发电子书3

    《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发电子书3》是一本专注于Java EE轻量级开发技术的专著,它深入探讨了Struts 2、Spring和Hibernate(SSH)这三大流行开源框架的集成与应用。...

    (SSH)轻量级框架文档

    SSH,即Struts、Hibernate和Spring,是Java开发中常用的一个轻量级Web应用程序框架,也被称作“经典企业级开发铁三角”。这三个组件分别负责Web层、持久层和业务层的管理,协同工作,为开发者提供了一种高效且灵活的...

    J2EE轻量级SSH

    J2EE轻量级SSH架构整合是一个非常实用的开发框架组合,它不仅结合了Java Web开发的三大核心技术(Struts2、Hibernate和Spring),而且通过引入DWR等框架进一步提高了系统的响应速度和用户体验。对于企业级应用开发而言...

    轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发电子书2

    《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发》是一本深入探讨Java EE企业级应用开发的书籍,尤其关注于轻量级框架的整合使用。Struts 2、Spring和Hibernate,简称SSH,是Java开发中最流行...

    轻量级 J2EE 企业应用实战:Struts+Spring+Hibernate 整合开发

    该书主要围绕着三个核心框架——Struts、Spring和Hibernate,详细阐述了如何在J2EE环境下进行轻量级应用的构建。以下是对这些技术的详细解释: **Struts** Struts是Apache软件基金会的一个开源项目,它是一个基于...

    一些很好的轻量级J2EE框架材料

    在给定的压缩包文件中,主要聚焦于三个关键的轻量级框架:Struts、Spring和Hibernate,这三者常被称为SSH(Struts、Spring、Hibernate)组合。 1. **Struts**: Struts是MVC(Model-View-Controller)设计模式的一...

    MyEclipse搭建SSH框架 Struts2

    Spring 是一个轻量级的 Java 框架,它提供了一个通用的依赖注入机制来简化应用程序的开发和维护。Hibernate 是一个基于 ORM(Object-Relational Mapping)的持久层框架,它提供了一个简洁高效的方式来访问和操作...

    轻量级JavaEE企业应用实战_Struts2+Spring3+Hibernate整合开发_第3版.part2

    轻量级JavaEE企业应用实战_Struts2+Spring3+Hibernate整合开发_第3版.part2

    轻量级Java EE企业应用实战(第4版) Struts 2+Spring 4+Hibernate整合开发 光盘 源码

    《轻量级Java EE企业应用实战(第4版)》这本书深入探讨了Struts 2、Spring 4和Hibernate这三大框架的整合开发,旨在帮助读者掌握如何在实际项目中高效构建Java EE应用。SSH(Struts 2、Spring、Hibernate)是Java ...

    Java EE 轻量级解决方案 — SSH 青岛东合信息技术有限公司 青岛海尔软件公司 著 教材源码 _ 第七章 Spring基础

    SSH(Struts、Spring、Hibernate)是Java EE领域中一个经典的轻量级开发组合,它将MVC(Model-View-Controller)设计模式、依赖注入和持久层管理完美地融合在一起。本章重点讲解SSH中的Spring框架的基础知识。 ...

    SSH框架搭建

    SSH框架,全称为Struts2、Spring和Hibernate的组合,...不过,随着技术的发展,Spring Boot和Spring MVC + MyBatis等轻量级框架的出现,SSH的使用逐渐减少,但其设计理念和核心思想仍然对现代Java开发有着深远的影响。

Global site tag (gtag.js) - Google Analytics