初识Spring
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要解决的主要问题。
面向切面编程,简单的来说就是在不改变源程序的基础上为代码段增加新的功能,对代码段进行曾强处理。它的设计思想来源于代理模式,其主要有以下两点:
- 增将处理(Advice)类型:在源对象的方法之前插入的强将处理为前置增强,该方法正常执行之后插入的增强处理为后置增强,此外还有环绕增强、异常抛出增强、最终增强等类型
- 切入点(Pointcut):可以插入增强处理的方法
使用Spring AOP实现日志输出
1.在项目中添加SpringAOP相关的jar文件
2.编写前置增强和后置增强实现日志功能
3.编写Spring配置文件,对业务方法进行增强处理
4.编写代码获取带有增强处理的业务对象
最终程序运行结果:

初识Spring的更多相关文章
- 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
在上篇博客初识Spring Boot框架中我们初步见识了SpringBoot的方便之处,很多小伙伴可能也会好奇这个Spring Boot是怎么实现自动配置的,那么今天我就带小伙伴我们自己来实现一个简单 ...
- 初识Spring security-添加security
请先查看 初识Spring security-无Security的SpringMVC 在pom.xml文件中添加包 <!-- Spring Security --> <depende ...
- 初识 Spring 框架
初识 Spring 框架可以帮助我们构建规范的.优秀的应用程序,简化烦琐的编码过程. Spring 是一个非常著名的轻量级的企业级开源框架,Spring 的目标是使 Java EE 更易用并促进良好的 ...
- 【初识Spring】对象(Bean)实例化及属性注入(xml方式)
title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...
- 深入理解Spring(一):初识Spring
深入理解Spring(一):初识Spring 一. Spring介绍 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnso ...
- 初识Spring框架
一.Ioc 1)概念:Ioc(Inversion Of Control)控制反转,也被称为依赖注入DI(Dependency Injection),是面向对象编程的一种思想. 2)作用:用来减低程序代 ...
- 初识Spring框架实现IOC和DI(依赖注入)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...
- 初识Spring MVC
1.什么是Spring MVC? Spring MVC属于SpringFrameWork的后续产品,它提供了构建 Web 应用程序的全功能 MVC 模块,与Struts2一样是一种优秀MVC框架,不同 ...
- Spring学习进阶(一)初识Spring
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
随机推荐
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- NoSQL初探之人人都爱Redis:(2)Redis API与常用数据类型简介
一.Redis API For .Net 首先,不得不说Redis官方提供了众多的API开发包,但是目前Redis官方版本不支持.Net直接进行连接,需要使用一些第三方的开源类库.目前最流行的就是Se ...
- 日志系统实战(二)-AOP动态获取运行时数据
介绍 这篇距上一篇已经拖3个月之久了,批评自己下. 通过上篇介绍了解如何利用mono反射代码,可以拿出编译好的静态数据.例如方法参数信息之类的. 但实际情况是往往需要的是运行时的数据,就是用户输入等外 ...
- spring事务管理器设计思想(一)
在最近做的一个项目里面,涉及到多数据源的操作,比较特殊的是,这多个数据库的表结构完全相同,由于我们使用的ibatis框架作为持久化层,为了防止每一个数据源都配置一套规则,所以重新实现了数据源,根据线程 ...
- MongoDB 聚合操作
在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...
- WaitType:SOS_SCHEDULER_YIELD
今天遇到一个query,处于SOS_SCHEDULER_YIELD 状态,physical IO 不增加,CPU的使用一直在增长.当一个sql query长时间处于SOS_SCHEDULER_YIEL ...
- jquery插件编写模版
jquery插件是什么??这里以讨论实力方法为主,比如 $("div").pluginname({}); 他的最简单形势应该是 $.prototype.plugin = funct ...
- win8下IE10的鼠标mouse事件响应错误BUG
具体症状就是有时候鼠标左键响应,有时候右键才能响应 问题的原因就是事件对象的detail没有复位 https://github.com/clientside/amplesdk/issues/187
- Sublime文件夹显示过滤
Preferences/Setting-User添加如下命令: "file_exclude_patterns": ["*.mate", "*.gif& ...
- IOS遍历网页获取网页中<img>标签中的图片url
前言: 项目中遇见一个需求遍历网页中所有的<img>标签并且去处图片的url 第一步:编写获取<img >标签的正则表达式,代码如下: -(NSArray*)getImgTag ...







