Spring简介,搭建Spring环境——轻量级容器框架(一)

Easter79
• 阅读 612

Spring是什么?

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

为什么使用Spring?

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

1、使我们的分层更好。

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

      Spring简介,搭建Spring环境——轻量级容器框架(一)

      从上图我们可以看到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环境——轻量级容器框架(一)

       相信你能看出来这是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配置文件,内容如下:

[html] view plain copy

  1. log4j.rootLogger=info, stdout  
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  4. log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

  

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

5、编写代码

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

      Spring简介,搭建Spring环境——轻量级容器框架(一)

UserDao接口

[java] view plain copy

  1. public interface UserDao {  
  2.     public void addUser(String userName,String password);  
  3. }

  

UserDao的实现

UserDao4MysqlImpl

[html] view plain copy

  1. public class UserDao4MySqlImpl implements UserDao {  
  2.     public void addUser(String userName,String password){  
  3.         System.out.println("UserDao4MySqlImpl.addUser()");  
  4.         System.out.println("userName="+userName);  
  5.         System.out.println("password="+password);  
  6.     }  
  7. }

  

UserDao4Oracelmpl

[html] view plain copy

  1. public class UserDao4OracleImpl implements UserDao {  
  2.     public void addUser(String userName,String password){  
  3.         System.out.println("UserDao4OracleImpl.addUser()");  
  4.         System.out.println("userName="+userName);  
  5.         System.out.println("password="+password);  
  6.     }  
  7. }

  

UserManager接口

[java] view plain copy

  1. public interface UserManager {  
  2.     public void addUser(String userName,String password);  
  3. }

  

UserManager的实现

[java] view plain copy

  1. import com.liang.spring.dao.UserDao;  

  2. public class UserManagerImpl implements UserManager {  

  3.     //定义一个成员变量,使用构造方式赋值  

  4.     private UserDao userDao;  

  5.     public UserManagerImpl(UserDao userDao) {  

  6.         this.userDao = userDao;  

  7.     }  

  8.     /** 

  9.      * set注入 

  10.      * @param userDao 

  11.      */  

  12. //  public void setUserDao(UserDao userDao) {  

  13. //      this.userDao = userDao;  

  14. //  }  

  15.     @Override  

  16.     public void addUser(String userName, String password) {  

  17.         userDao.addUser(userName, password);  

  18.     }  

  19. }

  

客户端

[java] view plain copy

  1. import org.springframework.beans.factory.BeanFactory;  

  2. import org.springframework.context.support.ClassPathXmlApplicationContext;  

  3. import com.liang.spring.manager.UserManager;  

  4. public class Client {  

  5.     /** 

  6.      * @param args 

  7.      */  

  8.     public static void main(String[] args) {  

  9.         //由我们的应用程序负责服务(对象)定位  

  10.         //这是一个组装过程,userManager用userDao,这种关系是用程序描述的,现在用配置文件描述  

  11.         //UserManager userManager = new UserManagerImpl(new UserDao4MySqlImpl());  

  12.         //userManager.addUser("张三", "123");  

  13.         //BeanFactory是一个接口,有不同的实现,ClassPathXmlApplicationContext是对beanFactory的实现  

  14.         //把applicationContext.xml读进来  

  15.         BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");  

  16.         //ApplicationContext都实现了beanFactory的接口  

  17.         //ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");  

  18.         //getBean加产品标识,相当与userManager的实现,再转化为userManager的接口  

  19.         UserManager userManager =(UserManager)factory.getBean("userManager");  

  20.         userManager.addUser("jiuqiyuliang", "123456");  

  21.     }  

  22. }

  

Spirng的配置文件:applicationContext.xml

[html] view plain copy

  1.   

  2. <beans xmlns="http://www.springframework.org/schema/beans"  

  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  4.          xmlns:aop="http://www.springframework.org/schema/aop"  

  5.          xmlns:tx="http://www.springframework.org/schema/tx"  

  6.          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  

  7.            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd  

  8.            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">  

  9.       

  10.       

  11.       

  12.       

  13.       

  14.     <!-- userManager依赖哪写dao,IoC容器不仅是一个工厂,它提供了管理依赖的能力。 

  15.      -->  

  16.       

  17.         <!-- 使用的构造函数,描述了一个种依赖关系。userManager依赖于Mysql的实现  

  18.         容器提供了查找能力,找到之后new好,之后会给userManager,放到userManager的过程  

  19.         为DI,依赖注入。(主动注入)-->  

  20.           

  21.         <!--或  

  22.           

  23.         -->  

  24.       

  

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

项目的测试结构:

Spring简介,搭建Spring环境——轻量级容器框架(一)

总结

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
Spring与Mybatis环境搭建
SH框架的结合几乎家喻户晓,但是一般的中小项目,使用Spring和MyBatis就够了,而且MyBatis轻便好使,易上手,值得大家尝试一次。  开篇简介:  Spring:Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。两个重要模块:Spring面向方面编程(AOP)和控制反转(IOC)容器。控制反转模
Easter79 Easter79
2年前
Spring从入门到入土——概述以及HelloWorld
第一篇本文主要介绍了Spring的基本概念以及如何快速编写一个Spring项目,并让它运行起来。Spring概述优点Spring是一个开源免费的框架、容器Spring是一个轻量级的框架、非侵入式的控制反转Ioc、面向切面Aop对事务的支持以及对框架的支持总之:spring是一个轻量
Stella981 Stella981
2年前
69道Spring面试题和答案
目录Spring概述依赖注入SpringbeansSpring注解Spring数据访问Spring面向切面编程(AOP)SpringMVCSpring 概述1. 什么是spring?Spring 是个java企业
Easter79 Easter79
2年前
Spring常用知识点总结
1\.Spring有哪些优点?  轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB。  控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。  面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来
Easter79 Easter79
2年前
Spring的基本应用(1):IDEA版本
一、Spring概述:1.什么是Spring?Spring是分层的JavaSE/EE应用fullstack(一站式)轻量级开源框架,以IoC(InverseOfControl:控制反转)和AoP(AspectOrientedPrograming,面向切面编程)为内核,提供了展现层SpringMVC和持久层Spring
Easter79 Easter79
2年前
Spring概念和Bean管理(配置文件)
Spring概念1.spring是开源的轻量级框架(免费,依赖少,可以直接使用)2.spring核心主要两部分:  (1)aop:面向切面编程,扩展功能不是修改源代码实现  (2)ioc:控制反转,  比如有个类,在类里面有个方法(不是静态方法),调用类里面的方法,需要创建类的对象,使用对象调用方法,创
Wesley13 Wesley13
2年前
Java开发工程师最新面试题库系列——Spring部分(附答案)
Spring1.Spring框架是什么?答:Spring是轻量级的面向切面和控制反转的框架。_初代版本为2002年发布的interface21_,Spring框架是为了解决企业级应用开发的复杂性的出现的,它可以帮助开发人员管理对象之间的关系。能实现模块与模块之间、类与类之间的解耦合,Spring是一个大杂烩,它集成其他
Easter79 Easter79
2年前
Spring知识点提炼
1\.Spring框架的作用清理:Spring是轻量级的,基本的版本大小为2MB控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。面向切面的编程AOP:Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。容器:Spring包含并管理应用中对象
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k