历尽千帆、归来仍是少年
最近封装 RPC 相关的模块,领导说数据转换可以考虑使用 Spring 原有的 Converter 体系。
最近封装 RPC 相关的模块,领导说数据转换可以考虑使用 Spring 原有的 Converter 体系。
简化之后类似如上、我们怎么在 T1 中获取到正确的 Type 类型、且该 Type 能用于反序列化。
package-info.java 文件估计大家见过但是自己却很少去创建和使用它、因为对于一般应用来说可能真的太少见了。
BoundSql 包含了解析之后的 SQL 语句(sql 字段)、每个“#{}”占位符的属性信息(parameterMappings 字段 ,List 类型)、实参信息(parameterObject 字段)以及 DynamicContext 中记录的 KV 信息(additionalParameters 集合,Map<String, Object> 类型)。
我们在以前的文章中曾经介绍过 OGNL 强大的表达式引擎
我们知道 Mybatis 在解释配置文件的时候使用的是 XMLConfigBuilder、在解释 mapper 标签的时候、为每个 Mapper.xml 文件创建一个 XMLMapperBuilder 实例解释 mapper 文件。
会初始化 XMLMapperBuilder 对象来加载各个 Mapper.xml 映射文件。同时,还会扫描 Mapper 映射文件相应的 Mapper 接口,处理其中的注解并将 Mapper 接口注册到 MapperRegistry 中。
我们在使用 Mybatis 的时候、只需要定义一个 Mapper xml 文件和一个对应的 Mapper 接口、并需要实现该接口、即可在程序中使用该 Mapper 接口、调用里面的方法对其进行查询(当然 xml 中的 namespace 要关联接口)。 那么这个功能是怎么实现的呢 ?
我们经常在工作中使用到 AOP 、在设计模式中、它属于代理模式。 代理模式属于一种结构性设计模式、让你能够提供对象的替代品或占位符。代理控制着对于远对象的访问、并允许在将请求提交给对象前后进行一些处理。
原有系统已经从各个供应商中获取到航班数据、格式为 XML、并且将该数据传输给一个智能分析系统中做统计分析。最近业务改动、对接了一个新的智能分析系统、但是对方的输入格式为 Json、这个时候我们该怎么办?
Spring Boot 默认使用的是 Logback 的日志框架、Logback 的组件主要通过 Spring Boot ApplicationListener 启动的
logback 会在类路径下寻找名为 logback-test.xml 的文件。 如果没有找到,logback 会继续寻找名为 logback.groovy 的文件。 如果没有找到,logback 会继续寻找名为 logback.xml 的文件。 如果没有找到,将会通过 JDK 提供的 ServiceLoader 工具在类路径下寻找文件 META-INFO/services/ch.qos.logback.classic.spi.Configurator,该文件的内容为实现了 Configurator 接口的实现类的全限定类名。 如果以上都没有成功,logback 会通过 BasicConfig
Logback 主要由三个 jar 一起组成 • slf4j-api • logback-core • logback-classic
数据库类型和 Java 类型之间的映射、在 Mybatis 中使用 TypeHandler 做这个转换
Mybatis 分为三层架构 • 基础支撑层 • 核心处理层 • 接口层
Java Database Connectivity 是一系列接口规范。Java 程序都是通过 JDBC 连接数据库的、然后通过其执行SQL、对数据库进行操作。 DBC 只是 Sun 公司定义的接口规范、具体实现是交由各个数据库厂商去实现的、因为每个数据库都有其特殊性、这些是 Java 规范没办法确定的
Java 存在两种包的导入机制 • 单类型导入、这个也是推荐并且也是常见常用的 • 按需类型导入、这个是不推荐的、也就是我们常说的 import xxx.xx.*
Cluster 文章中我们提及到会从 Directory 中获取 invoker 列表
今天谈谈 Dubbo 的 org.apache.dubbo.common.bytecode.Wrapper 类 Dubbo 依赖该工具在服务提供者端接收处理请求的时候、直接调用提供服务的 service 相对于传统的反射、性能其实有很大的提升
这个版本有 10 种容错机制 每个具体的 Cluster 实现都是创建一个对应的 Invoker、然后直接返回
前几篇文章讲述了 Dubbo 的注册和消费的流程、今天继续接着说下调用的流程(只谈及单注册中心、多注册中心只是前面多了一步、根据区域或者配置选择出其中一个注册中心而已)
至于真正发起调用的逻辑、我们放到下一个文章去写
上一篇文章中、我们已经知道 Dubbo 会额外注册 ServiceBean 到 Spring 容器中、因为需要借助这个 ServiceBean 注册到服务中心
在填充该 ServiceBean 的时候会将对应的那个声明了注解的 bean 设置到 ServiceBean 中。 剩下的流程放置到下一篇文章中
cluster 集群容错、负载均衡 common 公共包 compatible 兼容,比如说包的改变、alibaba 变成 apache config 加载配置、提供统一的对外的配置 configcenter 配置中心、统一管理dubbo的配置 container 容器 filter 过滤 metadata 元数据 monitor 监控模块 plugin :auth、qos registry 注册中心 remoting 远程协议支持、netty、mina rpc rpc 通信协议的支持 serialization 序列化
• 服务治理框架 • 服务的监控 • 服务的注册发现 • 服务的通信 • 服务的容错 • 服务的负载均衡
在一个完整的事件体系中、存在以下的角色 1. 事件:描述发生了什么事情、比如说请求处理完成、Spring 容器刷新完毕 2. 事件源:事件的产生者、任何一个事件都必须有一个事件源。比如请求处理完成的事件源就是 DispatcherServlet 、Spring 容器刷新完毕的事件源就是 ApplicationContext 3. 事件广播器:事件和事件监听器的桥梁、负责把事件通知给事件监听器 4. 事件监听器:监听事件的发生、可以在监听器中做一些处理
1. AOP 概念篇 今天介绍 Pointcut 的表达式
Spring AOP 系列的第一篇 先介绍一下 AOP 相关的一些概念。
自动注入相对显式注入、在实际场景中确实用得比较少、但是了解其过程还是会让你收获到一些相关的知识和流程
是不是跟 AOP 很像、但是其实是不一样的、MethodReplacer 你是永远没有办法调回被覆盖的方法的、它是完全覆盖的、而不是像 AOP 那样可以前置后置拦截。所以实际业务上很少地方可以用到这个 MethodReplacer 、能用到它的 AOP 都能做到、甚至比它灵活太多
其实这篇文章只是单纯的去了解关于 PropertyEditor 和 ConversionServer 的知识、并没有从源码详细说 Spring 怎么怎么去使用它们、这个可能放到以后的文章。这篇文章单纯是补全这个主题的基础知识、为后面继续看 Spring 的代码进行铺垫。
其实这篇文章只是单纯的去了解关于 PropertyEditor 和 ConversionServer 的知识、并没有从源码详细说 Spring 怎么怎么去使用它们、这个可能放到以后的文章。这篇文章单纯是补全这个主题的基础知识、为后面继续看 Spring 的代码进行铺垫。
其实这篇文章只是单纯的去了解关于 PropertyEditor 和 ConversionServer 的知识、并没有从源码详细说 Spring 怎么怎么去使用它们、这个可能放到以后的文章。这篇文章单纯是补全这个主题的基础知识、为后面继续看 Spring 的代码进行铺垫。
PropertyDescriptor:属性描述符,能够描述javaBean中的属性,通过属性描述符我们能知道这个属性的类型,获取到操纵属性的方法(getter/setter)
OGNL (Object Graph Navigation Language) 是一个开源的表达式引擎。通过使用OGNL,我们能够通过表达式存取Java对象树中的任意属性和调用Java对象树的方法等。也就是说,如果我们把表达式看成是一个带有语义的字符串,那么OGNL就是这个语义字符串与Java对象之间沟通的催化剂,通过OGNL,我们可以轻松解决在数据流转的过程中所碰到的各种问题。
快告诉我、Spring 将选择哪个构造函数用来实例化 HelloService ? 1⃣️ 还是 2⃣️ ?文末给出答案
上一篇的 BeanWrapper 我们介绍了 BeanWrapper 的来由。现在我们继续看看 Spring 是如何构造一个 Bean 的。
Environment 这个接口代表应用运行时的环境。它代表了两方面、一个是 profile 一个是 properties。访问 property 的方法通过 Environment 继承的接口 PropertyResolver 暴露出去。
简单说就是、在对应用进程发送停止指令之后、能保证正在执行的业务操作不受影响。 应用接收到停止指令之后的步骤应该是、停止接收访问请求、等待已经接收的请求处理完成、并能成功返回、这时才真正停止应用。
因为公司提供的基础框架使用的是 FastJson 框架、而部门的架构师推荐使用 Jackson。所以特此了解下 FastJson 相关的东西。
用GitLab吧直接(不需要Gerrit配合),界面非常美观,使用方法也很简单,而且也能满足之前的代码审核的要求。所以大家也都转去GitLab吧。
先介绍一个项目背景、框架使用的是公司在 Spring Boot 、Zookeeper等框架上自己封装的一个自研框架。
所谓的单元测试是测试应用程序的功能是否能够按需要正常运行,单元测试是一个对单一实体(类或方法)的测试。
Maven 学习集合
版本控制是一种记录一个或若干个文件内容变化、以便将来查阅特定版本修订情况的系统。
版本控制是一种记录一个或若干个文件内容变化、以便将来查阅特定版本修订情况的系统。
版本控制是一种记录一个或若干个文件内容变化、以便将来查阅特定版本修订情况的系统。
是相互之间存在一种或多种特定关系的数据元素的集合。 说白了就是数据的集合、但是集合里面的数据之间存在特地的关系(这翻译得好像没说一样)