spring(1)Spring之旅

【0】README
0.1)本文部分文字描述转自:“Spring In Action(中/英文版),旨在reviewSpring(1)Spring之旅 的相关知识;

【1】简化java 开发
1)为了降低java开发的复杂性,Spring采取了以下4种关键策略(strategy):
s1)基于POJO的轻量级和最小侵入性编程;(POJO == plain ordinary java object,简单java对象 == 普通javabean)
s2)通过依赖注入和面向接口实现松耦合;
s3)基于切面和惯例进行声明式编程;
s4)通过切面和模板减少样板式代码;

【1.2】依赖注入(Dependency Injection==DI)
1)耦合具有两面性:
1.1)一方面:紧密耦合的代码难以测试,难以复用,难以理解,并且典型地表现出打地鼠式的bug特性(修复一个bug,将会出现一个或更多新的bug);(干货——新贵词汇——打地鼠式的bug特性
1.2)另一方面:一定程度的耦合又是必须的——完全没有耦合的代码什么都做不了;(总而言之,耦合是必须的,但应该被小心谨慎地管理);
2)通过DI,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定;

3)这就是DI所带来的最大收益——松耦合。如果一个对象只通过接口(而不是具体实现或初始化过程)来表明依赖关系,那么这种依赖就能够在对象本身毫不知情的case下,用不同的具体实现进行替换;(干货——DI所带来的最大收益——松耦合)
4)创建应用组件之间协作的行为通常称为装配:Spring有多种装配bean 的方式,采用XML 是很常见的一种装配方式,也可以使用 java 来描述配置;(干货——装配的定义)
5)Spring通过应用上下文装置bean的定义并把他们组装起来。Spring应用上下文全权负责对象的创建和组装。Spring自带了多种应用上下文的实现,它们之间的主要区别仅仅在于 如何加载配置;

【1.3】应用切面
1)DI 能够让相互协作的软件组件保持松散耦合,而面向切面编程(AOP)允许你把遍布应用各处的功能分离出来形成可重用的组件;(干货——面向切面编程的定义)
2)面向切面编程往往被定义:为促使软件系统实现关注点的分离一项技术。系统由许多不同的组件组成,每一个组件各负责一块特定功能。除了实现自身核心的功能之外,这些组件还经常承担额外的职责。诸如日志,事务管理和安全这样的系统服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为他们会跨越系统的多个组件;(干货——横切关注点的定义)
3)AOP能够使这些服务模块化,并以声明的方式将它们应用到他们需要影响的组件中去。所造成的结果就是这些组件会具有更高的内聚性并且会更加关注自身的业务,完全不需要了解涉及系统服务所带来复杂性。总之,AOP 能够确保POJO的简单性;
4)看个荔枝:(本小姐末有辅助图说明)
4.0)相关源码
public class KnightMain {public static void main(String[] args) throws Exception {String dir = System.getProperty("user.dir") + File.separator + "META-INF" + File.separator;FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(dir+"knight.xml");Knight knight = context.getBean(Knight.class);knight.embarkOnQuest();context.close();}
}
对以上代码的分析(Analysis):
A1)使用FileSystemXmlApplicationContext  和 使用 ClassPathXmlApplicaitonContext的区别在于:FileSystemXmlApplicationContext 在指定的文件系统路径下查找 knight.xml 文件,而 ClassPathXmlApplicationContext 是所有的类路径(包含 JAR文件)下查找knight.xml 文件;
A2)如果你想从java 配置中加载应用上下文,那么可以使用 AnnotationConfigApplicationContext:
ApplicationContext context = new AnnotationConfigApplicationContext(com.spring.chapter1.KnightConfig.class);
4.1)console info:
五月 26, 2016 4:37:43 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@179d3b25: startup date [Thu May 26 16:37:42 CST 2016]; root of context hierarchy
五月 26, 2016 4:37:43 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from file [E:\bench-cluster\cloud-data-preprocess\SpringInAction4\META-INF\knight.xml]
before: Fa la la, the knight is so brave! // higglight line.
Embarking on quest to slay the dragon! // highlight line.
after: Tee hee hee, the brave knight did embark on a quest! // highlight lien.
五月 26, 2016 4:37:43 下午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.support.FileSystemXmlApplicationContext@179d3b25: startup date [Thu May 26 16:37:42 CST 2016]; root of context hierarchy
4.2)本文还是习惯上给出以上测试用例的调用过程


【2】容纳你的bean
1)intro to Spring容器:在基于spring的应用中,你的应用对象生存于Spring容器中;(干货——Spring容器的作用——Spring容器负责创建应用程序中的bean并通过DI 来协调这些对象之间的关系)
2)spring容器并不是只有一个。Spring自带了多个容器实现,可以归为两种不同的类型:
type1)bean工厂(org.springframework.beans.factory.eanFactory.context.ApplicationContext接口定义)是最简单的 容器,提供基本的DI支持;
type2)应用上下文(由 org.springframework.context.ApplicationContext接口定义)基于BeanFactory构建,并提供应用框架级别的访问;
3)推荐使用应用上下文,因为bean工厂对大多数应用来说太low了;
【2.1】使用应用上下文
1)Spring自带了多种类型的应用上下文,下面罗列了几个最可能遇到的;
case1)AnnotationConfigApplicationContext:从一个或多个基于java 的配置类中加载Spring应用上下文;
case2)AnnotationConifgWebApplicationContext:从一个或多个基于java 的配置类中加载Spring Web应用上下文;
case3)ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源;
case4)FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义;
case5)XmlWebApplicationContext:从web 应用下的一个或多个XML 配置文件中加载上下文定义;
Attention)使用FileSystemXmlApplicationContext  和 使用 ClassPathXmlApplicaitonContext的区别在于:(这里再次提供了它们的区别)FileSystemXmlApplicationContext 在指定的文件系统路径下查找 knight.xml 文件,而 ClassPathXmlApplicationContext 是所有的类路径(包含 JAR文件)下查找knight.xml 文件;

【3】Spring模块
1)intro:在Spring4.0中, Spring框架的发布版本包括了20个不同的模块,每个模块会有3个JAR文件(二进制类库,源码jar,以及javadoc的jar);


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache.camel_Apache Camel K 1.0在这里–您为什么要关心

apache.camel昨天我们发布了Apache Camel K 1.0,并在社交媒体和Camel网站上宣布了该版本。 那么,骆驼K是什么,为什么你要在乎呢? 这是一个很好的问题,我想通过提及伟大的思想来帮助回答这个问题。 Hugo Guerrero发表…

DRF之初识

目录 一、序列化和反序列化 【1】序列化 【2】反序列化 【3】小结 二、DRF的安装和快速使用 (1) 安装DRF: (2) 配置DRF: (3) 创建序列化器(Serializer): (4) 创建视图(View): (5) 配置URL路由: 【补充】下载…

spring(2)装配Bean

【0】README0)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review spring(2)装配Bean 的相关知识;1)在spring中,对象无需自己查找或创建与其所关联的其他对象。相反…

restful和rest_HATEOAS的RESTful服务:JVM上的REST API和超媒体

restful和rest1.简介 到目前为止,我们已经花了很多时间谈论了相当数量的关于角色的的超媒体和HATEOAS在REST风格的 Web服务和API,扫视不同规格和可用性方面。 听起来好像支持超媒体和HATEOAS并不难,只需选择您的收藏夹就可以了! …

Spring中配置数据源的4种形式

【0】README 0.1)以下内容转自:http://blog.csdn.net/orclight/article/details/8616103 不管采用何种持久化技术,都需要定义数据源。Spring中提供了4种不同形式的数据源配置方式: spring自带的数据源(DriverManagerDataSource)&…

MavenSelenium测试自动化教程

在进行自动化测试项目时,您需要与之关联的所有Selenium依赖项。 通常,这些依赖项是在项目生命周期中手动下载和升级的,但是随着项目规模的扩大,管理依赖项可能会非常困难。 这就是为什么需要构建自动化工具(例如Maven&…

命令行执行Junit测试

【0】README 0.1)本文旨在给出如何在命令行中执行 Junit测试的steps: 【1】在命令行中执行Junit测试 1)problemsolution: 1.1)problem: 1.2)solution:导出 JUnitCore 类并且使用 …

托管 非托管_如何在托管Kubernetes上还原Neo4J备份

托管 非托管在下面的视频中,我将解释如何将Neo4J实例的备份还原到在托管Kubernetes环境中运行的新实例。 备份内容将从先前写入备份的持久卷中获取。 在上一篇文章中,您可以首先了解如何进行备份。 自己尝试 同样,您将在以下GitHub存储库中…

spring(3)高级装配

【0】README0)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review spring(3)高级装配 的相关知识;【1】环境与profile(考虑数据库配置)1)使用嵌入式数据…

jmc线程转储_查找线程转储中的异常和错误

jmc线程转储线程转储是解决生产问题/调试生产问题的重要工件。 在像过去我们已经讨论了几种有效的线程转储故障模式: 堵车 , 跑步机 , RSI , 一个 LL条条大路通罗马 .........。 在本文中,我们想介绍另一种线程转储故障…

命令模式的两种不同实现

转载自 命令模式(Command)的两种不同实现命令模式(Command):将一个请求封装成一个对象,使得你用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能…

tomcat(18)部署器

【0】README-1)先上干货:本文重点分析了tomcat 如何部署WAR文件的项目形式 以及 普通文件夹的项目形式;不管是WAR文件 还是 普通文件夹的项目形式,在tomcat中,它们都是Context容器;(Bingo&#…

装饰器模式和代理模式的区别

转载自 装饰器模式和代理模式的区别学习AOP时,教材上面都说使用的是动态代理,可是在印象中代理模式一直都是控制访问什么的,怎么又动态增加行为了,动态增加行为不是装饰器模式吗?于是找了很多资料,想弄清楚…

使用Java 8 Stream像操作SQL一样处理数据(上)

转载自 使用Java 8 Stream像操作SQL一样处理数据(上) 几乎每个Java应用都要创建和处理集合。集合对于很多编程任务来说是一个很基本的需求。举个例子,在银行交易系统中你需要创建一个集合来存储用户的交易请求,然后你需要遍历整个…

tomcat(19)Manager应用程序的servlet类

【0】README1)本文部分文字描述转自:“深入剖析tomcat”,旨在学习“tomcat(19)Manager应用程序的servlet类” 的相关知识;2)Manager应用程序用来管理已经部署的web 应用程序;在tomcat7中,manage…

使用Java 8 Stream像操作SQL一样处理数据(下)

转载自 使用Java 8 Stream像操作SQL一样处理数据(下) 在上一篇文章中,我们介绍了Stream可以像操作数据库一样来操作集合,但是我们没有介绍 flatMap 和 collect 操作。这两种操作对实现复杂的查询是非常有用的。比如你可以结果 fl…

spring(4)面向切面的Spring(AOP)

【0】README1)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review “spring(4)面向切面的Spring(AOP)”的相关知识;2)在软件开发中,散布于应…

Mybatis-plus 思维导图,让 Mybatis-plus 不再难懂

转载自 Mybatis-plus 思维导图,让 Mybatis-plus 不再难懂 摘要: Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。mybatis-plus与mybatis mybatis Mybat…

报错:The type javax.servlet.http.HttpServletRequest cannot be resolved

【0】README 0.1)以下内容转自: http://blog.csdn.net/vincent080928/article/details/5392891 problem)The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly referenced from required .class files. 这…

MyBatis 思维导图,让 MyBatis 不再难懂(一)

转载自 MyBatis 思维导图,让 MyBatis 不再难懂(一)写在前面与hibernate相比,我无疑更喜欢mybatis,就因为我觉得它真的好用,哈哈。它简单上手和掌握;sql语句和代码分开,方便统一管理和…