我们介绍了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;
//  }@Overridepublic 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.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsdhttp://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层的灵活性可想而知。

项目的测试结构:

总结

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

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

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

  1. 【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)...

    目录: [SSH进阶之路]Struts基本原理 + 实现简单登录(二) [SSH进阶之路]一步步重构MVC实现Struts框架--从一个简单MVC开始(三) [SSH进阶之路]一步步重构MVC实现St ...

  2. 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

    [SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...

  3. 【SSH进阶之路】Hibernate基本映射(三)

    [SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...

  4. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  5. 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)

    Long Long ago.就听说过SSH.起初还以为是一个东东,详细内容更是不详,总认为高端大气上档次,经过学习之后才发现,不不过高大上,更是低调奢华有内涵,经过一段时间的研究和学习SSH框架的基本 ...

  6. Spring,搭建Spring环境

    控制反转:控制了对象的创建,反转:反转的是获取对象的方式,从自己创建对象变为由Spring工厂推送 1. 搭建Spring环境,导入依赖 spring-aop:开发AOP特性时需要的JAR sprin ...

  7. spring项目搭建-注册对象到容器测试

    那还没有进行配置,回到刚才要搭建的项目中来,你是不是要把user对象交给咱们的Spring容器来管理,那就要把User配置到这里面来,那下面看一下,导入完的具体配置,将User对象交给Spring容器 ...

  8. 外汇代理进阶之路:如何搭建MT4/MT5外汇贵金属交易平台

    CFD外汇交易市场是全球最大的金融市场,不断有新的投资者想要参与其中,也有很多代理在积攒一定的客户和经验后,想要搭建自己的交易平台,开启经纪商业务,那么如何搭建一个专业的外汇贵金属交易平台呢? 搭建外 ...

  9. Java程序员从笨鸟到菜鸟之(六十七)细谈Spring(一)spring简介

    spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.  然而,Sp ...

  10. Linux进阶之路-Ubuntu版

    Linux进阶之路 @[TOC](Linux进阶之路) Linux 简介 概述 Linux 与 Windows 比较 安装 Linux 操作系统 Linux 远程控制管理 概述 OpenSSH XSh ...

最新文章

  1. 058_Unicode字符官方标准九
  2. mysql 创建临时表 时间类型_MySQL问答系列之什么情况下会用到临时表
  3. SAP Commerce开发时的Spring学习要点记录
  4. C++函数名的修饰规则
  5. while(0)循环还执行吗_for循环
  6. OpenShift Security (11) - 用RHACS在DevOps的CICD中扫描部署中的安全风险
  7. 支持vxlan的服务器网卡,3台服务器互通vxlan
  8. MyBatis的一级缓存、二级缓存演示以及讲解,序列化异常的处理
  9. android 之手机拨号器,以及短信发送器的简单实现
  10. 使用 github + jekyll 搭建个人博客
  11. 生产环境服务器部署kvm虚拟化6,KVM虚拟化平台环境部署
  12. php留言板示例,php留言板完整实例源码
  13. 基于stm32单片机的电梯控制系统
  14. 贪吃蛇小程序(功能完善)
  15. Android 呼吸灯流程分析(一)
  16. 正弦余弦指引的乌鸦搜索算法-附代码
  17. .netMVC企业微信网页授权+注册全局过滤器
  18. HTML如何实现滚动文字
  19. linux java 缓存服务器,linux服务器缓存环境memcached筹建及应用(java)
  20. Ceph集群搭建系列(六):RBD块设备的使用场景、原理分析及其创建

热门文章

  1. 房屋登记官考核模拟题(6)
  2. 部署Hyper -V实现桌面虚拟化
  3. linux常用网站(不定期更新)
  4. Whisper的应用
  5. 晓前端·周刊【第6期】:量子霸权
  6. linux洪水攻击路由器,(20)Linux下ICMP洪水攻击实例
  7. 如何把img格式转换成vmdk格式
  8. 免费可用的Android手机传感器数据采集程序(附程序)
  9. windows安全中心(windows defender)对下载内容报毒解决方案
  10. Salesforce中国区或将解散!一代CRM巨头退出中国市场?