Spring IOC
总体的类图 spring-Ioc Bean 工厂提供 IOC 基本功能,Context 是全功能的 BeanFactory,是应用程序的全部上下文。 扩展点和生命周期钩子 Spring的扩展点.xmind 加载顺序: 获取工厂 准备工厂 后处理工厂 InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation,返回 object。 构造器 InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation,返回布尔值。 populateBean(注入 @Autowired,类内第一个方法),实际上调用的是 InstantiationAwareBeanPostProcessor.postProcessProperties InitializingBean: 各类 aware 方法注入 BeanPostProcessor.postProcessBeforeInitialization 的后处理器(@PostConsstruct) a...
Spring 与数据库
Java 执行事务的过程 1.获取连接 Connection con = DriverManager.getConnection() 2.开启事务con.setAutoCommit(true/false); 在 Spring 事务里(如 DataSourceTransactionManager 的 doBegin 方法)里,总是会显式地 con.setAutoCommit(false);(不然哪有事务可言)。 3.执行CRUD 4.提交事务/回滚事务 con.commit() / con.rollback(); 5.关闭连接 conn.close(); 本文涉及到的类型的类图 Spring 的事务管理核心类型和流程 DataSource 不同的数据源诞生不同的 DataSource。默认的 TransactionManager 本身是期待一个名叫“datasource”的数据源的。 FactoryBean 不同的 DataSource 装入不同的 FactoryBean,比如 JPA 的 EntityManagerFactory。 PlatformTransaction...
软件方法
建模带来竞争优势。 前言 “唱曲的名家,唱到极快处,吐字依然干净利落”。 不能站在别人的肩膀上看得更远,只是摘抄别人的观点,无意义。要有足够的积累,和深度的思考。 涉众(stakeholder)往往会做而不会定义,把不同类型的涉众放在一起访谈时,只会剩下在场军衔最高那个人的意见。 需求变更的时候,要注意涉众利益角度分析。 项目的流程步骤: 寻找老大 揣摩愿景 业务建模 系统用例 需求规约 分析模型 设计开发 只有一个领域(核心域)的知识是系统能在市场上生存的理由。 拿来主义要摒除门户之见,不关注流派和风格,着力于细节和应用。 建模与 uml 利润 = 需求 - 设计 需求:提升销售 设计:降低开发维护成本 几种弊习: 从需求直接映射设计,会得到大量的重复代码。 从设计出发来定义需求,会得到一堆假的“需求”。 从涉众视角对系统功能分包会得到需求包。 子系统是基于内部视角根据系统部件的耦合和内聚情况进行切割。 需求 设计 卖的视角 做的视角 具体 抽象 产品当项目做 项目当产品做 设计源于需求,高于需求 建模工作流 业务建模:描述组织...
FatJar 问题
什么是 FatJar FatJar 又叫 uber-jar。uber 不是打车的 uber,而是德语里面的 uber,意思是英语里面的 over-勉强可以翻译为超越。 FatJar 是一个 all-in-one 的 jar,它可以让部署和运行更加便利,它让最终部署和运行的环境不依赖于任何 maven 或者 lib 的 classpath。 FarJar 的三种具体类型 非遮蔽的(Unshaded) 依赖于maven-assembly-plugin。 12345678910111213141516171819<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>CHOOSE LATEST VERSION HERE</version> <configuration> <descript...
交易系统模型设计
交易系统.xmind
Spring 概览
Spring 起源于 2003 年,它作为 Java EE 平台规范的补充,而不是完全拥抱 specification。 Spring 可以指的是 entire family of projects。也可以单指 Spring Framework(换言之,Spring Framework 本身也只是 family 的一部分)。 Spring Framework 被模块化了,它的核心只包括 core container(主要解决依赖注入问题)。但是针对不同的应用架构,它提供不同的支持,包括 messaging、transactionl、persistence 和 web。这些模块原本命名为 “spring-core” 和 “spring-context”,在 Java 9 的 jigsaw 项目来临之时,也开始支持 module path,生成“自动模块名”清单项,并且定义语言级别的模块名,如"spring.core"、“spring.context”。 Spring 支持的 JSR 有: Servlet API (JSR 340) WebSocket API ...
Maven 全局配置文件settings.xml
xml 小知识 xmlns:xsi xmlns:即为别名 12345678910<settings <!-- xml 名字空间 -->xmlns="http://maven.apache.org/SETTINGS/1.0.0"<!-- 该文件语法说明 使用了XMLSchema-instance -->xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<!-- schema 的位置 -->xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0http://maven.apache.org/xsd/settings-1.0.0.xsd"<!-- 使用了一个 xsd -->> settings.xml 的功能 settings.xml 是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。 Settings.xml中包含: 本地仓...
Spark SQL 原理
Spark SQL的发展历程 为了给熟悉的 RDBMS 但又不理解 MapReduce 的技术人员提供快速上手的工具,Hive 应运而生,他是当时唯一运行在 Hadoop 上的SQL-On-Hadoop 工具。 但是 MapReduce 计算过程中大量的中间磁盘落地过程消耗了大量的 I/O,降低的运行效率,为了提高 SQL 的执行效率,大量的 SQL-On-Hadoop工具开始产生,而 Shark 是其中一个表现较为突出的项目。 Shark是伯克利实验室 Spark 生态环境的组件之一,它主要修改了内存管理,物理计划和执行三个模块,值得它能运行在 Spark 的引擎上,从而提高 SQL 查询的效率。 但是随着 Spark 的发展,Shark 对 Hive 过多的依赖制约了 Spark 的设计理念和各个组件之间的相互继承,所以 Spark 团队停止了对 Shark 的开发,提出了 SparkSQL 项目。 因为摆脱了Hive 的过度依赖,Spark SQL在数据兼容性,性能优化和组件扩展等各个方面都得到了极大的方便和发展。 提出了 SparkSQL 项目之后,SQL On Spar...
gradle 总结
gradle.xmind 这里的 AIDL 是 Android Interface Definition Language 的意思。Dex 是 Dalvik executable format 的意思。 基本概念 gradle 是一个自动化构建工具(build automation,而不是像 maven 一样标榜自己是个 project management 工具),通过组织一系列 task 来最终完成自动化构建,所以 task 是 gradle 里最重要的概念之一, 以打包生成 apk 为例,整个过程要经过资源的处理,javac 编译,dex 打包,apk 打包,签名等等步骤,每个步骤就对应到 gradle 里的一个 task。因为这些 task 是 gradle 的生命周期里特有的,所以 gradle 的插件应该不能移植到其他构建工具里- maven 和 gradle 的插件不互通。 gradle 是事实上的 android/Kotlin 默认构建工具,虽然基于 JVM,但是可以用来构建其他语言。 每一个插件新增在 gradle 脚本里,都会带来新的 tasks。...
《枪炮、病菌和钢铁》札记
先发未必先到,关键性的因素可能在中后半段才起作用。 代差很可怕,代差带来的结果是压倒性的,难以逆转和抗拒的。 直接因素是什么,终极因素是什么?点在哪里,面是什么? 地久天长的力量:群体的理解是深刻的,但对更大的事物的理解是盲目的-更地久天长的东西往往更大,而更大的东西越需要接力赛式的理解。这就是得天独厚的意义。 天造地设的差异,往往影响非常深刻。有些东西的潜力很大,有些东西的潜力很小。有些东西的潜力易于发觉,因为盲区很小;而有些东西的潜力难于发觉,需要更长的时间来观察-如果这一过程没有被外来的其他力量所中断的话。 两拨农民,都是文盲。一拨农民的祖先长期和从驯化动物得来的病菌作斗争,带有免疫力和另一拨农民作者,对另一拨农民是灭顶之灾-欧洲的拓殖者就是这样消灭美洲的原住民的,这样的军队才是最可怕的。从这个角度来看,被保护得很好的群体,未必能够在历史长河中获胜,因为他们不知道竞争力差异也许来自一个意想不到的维度。 安娜卡列尼娜法则:关注导致失败的因素更重要,导致失败的因素比想象中多。 熊不可养太大,养到一岁就就可以小心为妙了-俄罗斯人恐怕不同意。 纬度对生物的影响,比经度要大,从最南...