《Spring实战》第一章 — Spring之旅
2019独角兽企业重金招聘Python工程师标准>>>
1.1 使用Spring简化Java开发
为了降低Java开发,Spring使用了一下4种关键策略:
- 基于POJO的轻量级和最小侵入性编程;
- 通过依赖注入和面向接口实现松耦合;
- 基于切面和管理进行声明式编程;
- 通过切面和模版减少样板式代码;
1.1.1 激发POJO的潜能
Spring竭力避免因自身的API而弄乱你的代码。不会强迫你去实现Spring规范的接口或继承Spring规范的类,相反,它的类通常没有任何痕迹表名你使用了Spring。最坏的场景是,一个类或许会使用Spring的注解,但它仍然是POJO。
1.1.2 依赖注入(DI)
任何一个有实际意义的应用都会由两个或者更多的类组合,这些类相互之间进行协作来完成特定的业务逻辑。按照传统做法,每个对象负责管理与自己互相协作的对象的引用,这将会导致高度耦合和难以测试的代码。
耦合具有两面性。一方面,紧密耦合的代码难以测试、难以复用、难以理解,并且典型地出现打地鼠式的bug特性。另一方面,一定程度的耦合又是必须的,完全没有耦合的代码什么也做不了。总而言之,耦合是必须的,但应当被小心谨慎的管理。
通过依赖倒置,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理它们的依赖关系,依赖系统将被自动侏儒到需要他们的对象中去。
1.1.3 应用切面(AOP)
依赖倒置能够让互相协作的软件组件保持松散耦合,而面向切面编程(aspect-oriented-programming),允许你把遍布应用各处的功能分离出来形成可重用的组件。
AOP往往被定义为促使软件系统实现关注点的分离技术。例如日志、事务管理和安全这样的系统服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为它们会跨越系统的多个组件。
1.1.4 消除样板式代码
最常用的是JDBC代码,比如查询,只有少量查询代码淹没在一堆JDBC的样板式代码中。而且JDBC不是产生样板式代码的唯一场景。
JDBC不是生产样板式代码的以为场景。在许多编程场景中往往会导致类似的样板式代码,JMS、JNDI和使用REST服务通常也涉及大量的重复代码。
1.2 容纳Bean
1.2.1 使用应用上下文
Spring自带了多种类型的应用上下文:
- AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载Spring应用上下文;
- AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文;
- ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源;
- FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义;
- XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义;
1.2.2 Bean的生命周期
- Spring对Bean进行实例化;
- Spring将值和Bean的引用注入到Bean对应的属性中;
- 如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法;
- 如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器传入实例;
- 如果Bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将Bean所在的应用上下文的引用传入进来;
- 如果Bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()方法;
- 如果Bean实现了InitializingBean接口,Spring将调用它们的afterPropertiesSet()方法。类似的,如果Bean使用initMethod声明了初始化方法,该方法也会被调用;
- 如果Bean实现了BeanPostPrecessor接口,Spring将调用他们的postProcessAfterInitialization()方法;
- 此时,Bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;
- 如果Bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果Bean使用destoryMethod声明了销毁方法,该方法也会被调用;
1.3 Spring风景线
1.3.1 Spring模块
当我们下载Spring发布版本并查看其lib目录时,会发现里面有多个JAR文件,在Spring4.0中包括了20个不同的模块,每个模块会有3个JAR文件(二进制类库、源码的JAR以及JavaDoc的JAR)。
这些模块分为6类不同的功能:
- 数据库访问与集成:JDBC、Transaction、ORM、OXM、Messaging、JMS;
- Web与远程调用:Web、WebServlet、WebPortlet、WebSocket;
- 面相切面编程:AOP、Aspects;
- Instrumentation:Instrument、InstrumentTomcat;
- Spring核心容器:Beans、Core、Context、Expression、ContextSupport;
- 测试:Test;
1.3.2 Spring Portfolio
事实上,Spring远不是Spring框架锁下载的那些。概括的讲,整个Spring Portfolio几乎为每一个领域的Java开发都提供了Spring编程模型。
- SpringWebFlow:基于流程的会话式Web应用;
- SpringWebService:提供了契约优先的WebService模型;
- SpringSecurity:提供了声明式的安全机制;
- SpringIntegration:提供了多种通用应用集成模型的Spring声明式风格实现;
- SpringBatch:提供对数据进行大量操作;
- SpringData:为持久化提供了一种简单的编程模型;
- SpringSocial:它能够帮助你通过REST API连接Spring应用;
- SpringMobile:支持移动Web应用开发;
- SpringforAndroid:基于Android设备的本地应用提供某些简单的支持;
- SpringBoot:大量依赖于自动配置技术,消除大部分Spring配置。
转载于:https://my.oschina.net/u/2450666/blog/784986
《Spring实战》第一章 — Spring之旅相关推荐
- Spring实战 | 第一部分 Spring的核心(第一章 Spring之旅)
Spring的bean容器 介绍Spring的核心模块 更为强大的Spring生态系统 Spring的新功能 一.简化java开发 为了降低Spring开发的复杂性,Spring采取了以下4钟关键策略 ...
- Spring实战 | 第一部分 Spring的核心(第四章 面向切面的Spring)
第四章 面向切面编程 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 AspectJ是一个面向切面的框架,它扩展了java语言.AspectJ定义 ...
- Spring boot 第一章 Spring发展历史
2019独角兽企业重金招聘Python工程师标准>>> Spring 的发展 1.Spring 1.x 时代 在spring 1.x 时代,都是通过XML文件配置bean,随着项目的 ...
- Spring 实战-第一章-基本概念
依赖注入(Dependency Injection,DI) 通过第三方配置初始化对象,而不是把具体的实现写在对象中,这样程序入口与具体实现进行了解耦.比如动作定义为接口,具体做什么动作 由实现动作接口 ...
- spring in action学习-第一章 spring之旅
首先我先吐槽一下这本书的封面图,我能理解成一个包着头巾的男人举着个水壶昂首挺胸,最后给你个眼神....开玩笑的这幅插图是约旦西南部卡拉克省的居民,那里的山顶有座城堡,对死海和平原有极佳的视野,这幅图出 ...
- 19年8月 字母哥 第一章 spring boot 2.x基础及概念入门 这里全部看完了 热部署没出来 第二章在前面2页 用热点公司网不行
http://springboot.zimug.com/1233100 文档 http://www.zimug.com/page/5 字母哥个人博客 11111 第一章 spring bo ...
- 第一章 Spring基础
第一章 Spring基础 1.1 Spring介绍 Spring是一个框架,框架是高度抽取.可重用的代码的一种设计.Spring就是多个可重用的模块的集合,从而形成一个领域的整体解决方案. Sprin ...
- 第一章 Spring的简单剖析
第一章 Spring的简单剖析 简单的说Spring是什么呢?如果单从字面上理解它,可以解释为: 春天, 跃起, 弹性-.中国有句名言:"一年四季在于春".在字面可以想 ...
- 框架设计--第一章 Spring的基本应用--习题答案
摘要:微信搜索[三桥君] 课程介绍:"框架技术"是软件工程专业的核心课程,是本专业限选课,是Java 应用开发课程,是本专业学生就业的主要方向. 说明:框架设计其他章节的习题答案也 ...
- 程序员视角的计算机系统 第一章 计算机系统 之旅
程序员视角的计算机系统 第一章 计算机系统 之旅 一个计算机系统由硬件和系统软件组成,硬件和软件一起工作来运行应用程序. 系统的特定的实现随时间的流逝而改变,但是它的本质性的概念不会改变. 所有的计算 ...
最新文章
- web标准化设计:常用的CSS命名规则
- 利用for循环完成你的第一个脚本
- ***JAVA多线程和并发基础面试问答
- phpmyadmin登录报错crypt_random_string requires at least one symmetric cipher be loaded 解决方法
- JAVA正則表達式小总结
- c++图的创建_使用 Amazon Neptune 构建基于图数据库的应用
- python实现微信自动发信息_Python实现智慧-定期向微信女友发送消息,python,智给,定时,发消息...
- 架构模式_Index
- Android之解决webview加载第三方网页点击弹不出下拉框(html页面里面的select标签)
- 51nod-诺德街【数学期望】
- Data - 信息获取途径汇总
- angularjs post返回html_Python 爬虫网页解析工具lxml.html(二)
- 如何正确获取安卓内置SD卡的路径
- 从 CCNA 到 CCIE
- 你真的了解“无纸化办公”了吗?
- 全球及中国医疗体制改革行业运作前景与发展策略研究报告2022年
- 谭浩强C++ 第十章
- arduino/mixly红外发射接收模块
- 出色不如走运全文第二部分
- 淘宝宝贝标题的优化设置技巧
热门文章
- 左神算法进阶班5_3求公司的最大活跃度
- Does taro support react hook?
- 解决sourceTree的git clone 报SSH密钥认证失败的问题
- 问题:npm WARN ajv-keywords@3.2.0 requires a peer of ajv@^6.0.0 but none is installed.
- NuGet程序包安装SQLite后完全抽离出SQLite之入门介绍及注意事项,你真的懂了吗?...
- 喝最烈的酒、挖最大的DONG——工具与技巧篇
- 写一个简单的实时互动小游戏
- Bottle: Python Web Framework
- javaweb中jsp调试8080端口被占用问题
- C# 连接SQL Server数据库的几种方式--server+data source等方式