Spring简介

说到Spring就得提到它的作者“Rod Johnson”,2002年他编写了《Expert One-on_One java EE设计与开发》一书。在书中,它对传统的java EE技术日益臃肿和低效提出了质疑,他觉得应该有更便捷的做法,于是提出了Interface 21,也就是Spring框架的雏形。他提出了技术以实用为准的主张,引发了人们对“正统”java EE的反思。2003年2月Spring框架正式成为一个开源项目,并发布于SourceForge。

Spring致力于java EE应用的各种解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,但Spring并不想取代那些已有的框架,而是以高度的开放性与他们无缝整合。

Spring框架大约有20个功能模块组成。这些模块被分成6个部分,分别是:Core Container、DataAccess/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation及Test。

Spring Core 是框架的基础部分,提供了IOC特性。Spring Context为企业级开发提供了便利和集成的工具。Spring AOP是基于Spring Core的符合规范的面向切面编程的实现。Spring JDBC提供了JDBC的抽象层,简化了JDBC编码,同时使代码更健壮。Spring ORM部分对Hibernate等ORM框架提供了支持。Spring Web 为Spring在Web应用程序中的使用提供了支持。

Spring Ioc

控制反转(Inversion of Control,Ioc),也被称为依赖注入(Dependency Injection,DI),是面向对象编程的一种设计理念,用来减低程序代码的耦合度。

什么是依赖?

依赖在代码中一般指通过局部变量、方法参数、返回值等建立的对于其他对象的调用关系,例如A类的方法中,实例化了B类的对象并调用其他方法已完成特定的功能,我们就说A类依赖于B类。简单说就是如果A类想要完成某种特定功能必须要使用到B类的实例或方法那我们就说A类依赖于B类。

几乎所有的成序都是由两个或更多的类通过彼此合作来实现完整的功能,类与类之间的依赖关系增加的系统开发的复杂程度,我们开发一个类的时候,还要考虑对正在使用该类的其他类的影响。从而导致了系统不具备良好的扩展性和可维护性,甚至在开发中难以进行测试。这时我们就要使用到控制反转了。最简单的控制反转的体现就是《设计模式》中的简答工厂模式了,在该模式中A类依赖于B类对象,但A类并不直接使用代码去创建B类对象而是将这一工作交给了C类去完成,从而降低了A类与B类之间的耦合度。这样使用工厂类虽然可以降低类与类之间的耦合度但是大量的工厂类被引入项目明显增减的开发的工作量。而Spring能够替我们完成这项额外的工作,为我们提供了完整的Ioc实现,让我们得以专注于业务类的设计。好了让我们通过一个小demo来了解一下Spring IOC如何使用吧!

1.下载Spring 并添加到项目中。

 2.编写配置文件。

3.编写代码获取HelloSpring实例。

Spring AOP

面向切面编程(Aspect Oriented Programming,AOP)是软件编程思想发展到一定阶段的产物,是面向对象编程的有益补充。AOP一般使用与具有横切逻辑的场合,如访问控制、事务管理、性能检测等。像这些穿插在既定业务中的通用操作,如日志记录等,就是所谓的“横切逻辑”,也称为切面。当我们要增加或减少横切逻辑的时候还要修改业务方法中的相应代码。我们希望无需在业务方法中显示编写这些通用的代码,在需要的时候系统能自动帮我们调用所需的功能代码,这正是AOP要解决的主要问题。

面向切面编程,简单的来说就是在不改变源程序的基础上为代码段增加新的功能,对代码段进行曾强处理。它的设计思想来源于代理模式,其主要有以下两点:

  1. 增将处理(Advice)类型:在源对象的方法之前插入的强将处理为前置增强,该方法正常执行之后插入的增强处理为后置增强,此外还有环绕增强、异常抛出增强、最终增强等类型
  2. 切入点(Pointcut):可以插入增强处理的方法

使用Spring AOP实现日志输出

1.在项目中添加SpringAOP相关的jar文件

2.编写前置增强和后置增强实现日志功能

3.编写Spring配置文件,对业务方法进行增强处理

4.编写代码获取带有增强处理的业务对象

最终程序运行结果:

初识Spring的更多相关文章

  1. 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置

    在上篇博客初识Spring Boot框架中我们初步见识了SpringBoot的方便之处,很多小伙伴可能也会好奇这个Spring Boot是怎么实现自动配置的,那么今天我就带小伙伴我们自己来实现一个简单 ...

  2. 初识Spring security-添加security

    请先查看 初识Spring security-无Security的SpringMVC 在pom.xml文件中添加包 <!-- Spring Security --> <depende ...

  3. 初识 Spring 框架

    初识 Spring 框架可以帮助我们构建规范的.优秀的应用程序,简化烦琐的编码过程. Spring 是一个非常著名的轻量级的企业级开源框架,Spring 的目标是使 Java EE 更易用并促进良好的 ...

  4. 【初识Spring】对象(Bean)实例化及属性注入(xml方式)

    title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...

  5. 深入理解Spring(一):初识Spring

    深入理解Spring(一):初识Spring 一. Spring介绍        Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnso ...

  6. 初识Spring框架

    一.Ioc 1)概念:Ioc(Inversion Of Control)控制反转,也被称为依赖注入DI(Dependency Injection),是面向对象编程的一种思想. 2)作用:用来减低程序代 ...

  7. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  8. 初识Spring MVC

    1.什么是Spring MVC? Spring MVC属于SpringFrameWork的后续产品,它提供了构建 Web 应用程序的全功能 MVC 模块,与Struts2一样是一种优秀MVC框架,不同 ...

  9. Spring学习进阶(一)初识Spring

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

随机推荐

  1. FizzBuzzWhizz游戏的高效解法

    最近比较火的一道题(传送门),看见园友们的谈论(传送门1 传送门2),都是从1到100的扫描,我想说说的另一种想法. 可以把这道题转换成给100个人发纸牌的游戏,每人所报的就是纸牌上写的东西. 纸牌发 ...

  2. Android课程---关于数据存储的学习(3)之数据库和事务

    DataActivity3.java package com.hanqi.test5; import android.content.ContentValues; import android.dat ...

  3. ASP.NET Core 优雅的在开发环境保存机密(User Secrets)

    前言 在应用程序开发的过程中,有的时候需要在代码中保存一些机密的信息,比如加密密钥,字符串,或者是用户名密码等.通常的做法是保存到一个配置文件中,在以前我们会把他保存到web.config中,但是在A ...

  4. Lesson 4 An existing trip

    Text I have just received a letter from my brother,Tim. He is in Australia. He has been there for si ...

  5. 剑指Offer面试题:20.栈的压入、弹出序列

    一.题目:栈的压入.弹出序列 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4 ...

  6. MySQL RANGE分区

    200 ? "200px" : this.width)!important;} --> 介绍 RANGE分区基于一个给定的连续区间范围,早期版本RANGE主要是基于整数的分区 ...

  7. android内部培训视频_第二节 布局基础

    第二节:布局入门 一.线性布局 需要掌握的属性: 1.orientation:排列方式 vertical:垂直 Horizontal:水平 2.weight:水平布局的权重 3.gravity:子控件 ...

  8. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)

    VB6.0中,日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值,或许是一个不错的选择. 实现效果如下图: 文本框txtStopTime1 时间框DTStopTime1(DTPicke ...

  9. 【原】Python用例:将指定文件或目录打包成zip文件

    #This Demo is used to compress files to .zip file #Base on Windows import os import time #The files ...

  10. php后台增加删除修改跳转页面

    第一步 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...