16 javaSPI
参考文献https://www.zhihu.com/question/486985113/answer/2627178730 1 概述JavaSPI机制概述Java SPI机制:SPI全称为Service Provider Interface,服务提供接口,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 SPI就是一种将服务接口与服务实现分离以达到解耦、大大提升了程序可扩展行性的机制。引入服务提供者就是即SPI接口的实现者,通过本地注册来发现获取到具体的实现类。实现轻松可插拔。 Java SPI本质上其实就是“基于接口编程+策略模式+配置文件”组合实现的动态加载机制。 为了实现在模块装配的时候不用在程序里动态指明,这就需要一种本地服务发现机制。Java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。 JavaSpi起本身也是一种控制反转思想和依赖注入框架。通过额外的程序注入类的实现。包括控制反转和依赖注入两个过程。“Service Provider”和相应的工具”ServiceLoader”。其声明文件相当于...
Junit
## 1 概述 ### 是什么 https://blog.csdn.net/weixin_43498556/article/details/120839089 JUnit是Java编程语言的单元测试框架,用于编写和可重复运行的自动化测试。 1. 编码完成就可以立刻测试,尽早发现问题 2. 将测试保存成为了代码,可以随时快速执行 3. 可以嵌入持续集成流水线,自动为每次代码修改保驾护航 ### 注意事项 * 测试方法必须使用 @Test 修饰 * 测试方法必须使用 public void 进行修饰,不能带参数 * 一般使用单元测试会新建一个 test 目录存放测试代码,在生产部署的时候只需要将 test 目录下代码删除即可 * 测试代码的包应该和被测试代码包结构保持一致 * 测试单元中的每个方法必须可以独立测试,方法间不能有任何依赖 * 测试类一般使用 Test 作为类名的后缀 * 测试方法使一般用 test 作为方法名的前缀 ### 测试失败 * Failure:一般是由于测试结果和预期结果不一致引发的,表示测试的这个点发现了问题 * Error:是由代码...
mockito
官网http://mockito.org/API http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html抄笔记,https://www.letianbiji.com/java-mockito/mockito-test-isolate.html 基本概念单元测试UT工作一段时间后,才真正意识到代码质量的重要性。虽然囫囵吞枣式地开发,表面上看来速度很快,但是给后续的维护与拓展制造了很多隐患。作为一个想专业但还不专业的程序员,通过构建覆盖率比较高的单元测试用例,可以比较显著地提高代码质量。如后续需求变更、版本迭代时,重新跑一次单元测试即可校验自己的改动是否正确。 是什么Mockito是mocking框架,它让你用简洁的API做测试。而且Mockito简单易学,它可读性强和验证语法简洁。 Stub和Mock异同相同:Stub和Mock都是模拟外部依赖不同:Stub是完全模拟一个外部依赖, 而Mock还可以用来判断测试通过还是失败 与Junit框架一同使用请MockitoAnnotations.initMocks(...
sofabolt
sofabolt基础通信模型阻塞与同步的再讨论四个线程的模型:(非常重要。非常简单。非常关键) 有的时候,不必非得给一次通信扣上同步或者一部的的帽子。 客户端的同步异步称为阻塞和非阻塞,服务器端的同步异步称为同步异步。 只要链路上有一处是一部的,我们称整个调用链路就是异步的。 将客户端分为客户端线程和客户端连接线程,将服务端分为服务端线程和服务端连接线程。 如果客户端线程等待连接线程返回结果,则称为阻塞的。如果不等待连接线程的结果,称为非阻塞的。 如果服务端连接线程等待服务端线程的结果,则称为同步的。如果不等待服务端处理线程的结果,称为异步的。 四种客户端模型我们提供了四种通信模型,这四种模型都是客户端的调用模式。 Oneway 调用(客户端非阻塞) 当前线程发起调用后,不关心调用结果,不做超时控制,只要请求已经发出,就完成本次调用。注意 Oneway 调用不保证成功,而且发起方无法知道调用结果。因此通常用于可以重试,或者定时通知类的场景,调用过程是有可能因为网络问题,机器故障等原因,导致请求失败。业务场景需要能接受这样的异常场景,才可以使用。请参考示例。 Sync...
log4j
https://blog.csdn.net/qq_43842093/article/details/122810961 appender ConsoleAppender: 日志输出到控制台; FileAppender:输出到文件; RollingFileAppender:输出到文件,文件达到一定阈值时,自动备份日志文件; DailyRollingFileAppender:可定期备份日志文件,默认一天一个文件,也可设置为每分钟一个、每小时一个; WriterAppender:可自定义日志输出位置。 日志级别一般日志级别包括:ALL,DEBUG, INFO, WARN, ERROR,FATAL,OFF 输出格式 org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) 123...
slf4j
原理说明slf4j是门面模式的典型应用,因此在讲slf4j前,我们先简单回顾一下门面模式, 门面模式,其核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。用一张图来表示门面模式的结构为: 门面模式的核心为Facade即门面对象,门面对象核心为几个点: 知道所有子角色的功能和责任 将客户端发来的请求委派到子系统中,没有实际业务逻辑 不参与子系统内业务逻辑的实现 解决这个问题的方式就是引入一个适配层,由适配层决定使用哪一种日志系统,而调用端只需要做的事情就是打印日志而不需要关心如何打印日志,slf4j或者commons-logging就是这种适配层,slf4j是本文研究的对象。 从上面的描述,我们必须清楚地知道一点:slf4j只是一个日志标准,并不是日志系统的具体实现。理解这句话非常重要,slf4j只做两件事情: 提供日志接口 提供获取具体日志对象的方法 slf4j的直接/间接实现有slf4j-simple、logback、slf4j-log4j12。slf4j-simple、logback都是slf4j的具体实现,log4j并不直...
03 Bean配置文件
Bean配置文件 bean配置文件:spring配置bean的文件。 java Bean配置文件,通过@Configuration加载 XML Bean配置文件,xml定义的配置文件 属性配置文件:spring配置key-value的文件 1 注解说明注解体系 元注解@Rentention @Docemented,@Inherited,@Target JDK标准注解 Spring标准注解@Bean @Component @Serivce,@Controller,@Configuration,@Import,@Autowire springboot补充注解 导入容器spring导入容器主要有三种方式 标准组件:@Compoent、@Repository、@Service、@Controller四种类型的组件。通过@ComponentScan定义的扫描路径扫描后,导入到Spring容器中。 自动配置:通过@Configuration定义的配置类。通过@EnableAutoConfiguration注解定义扫描 主类包路径下的所有配置类 和 SpringFactories...
05 自动配置原理
1 自动配置加载的过程加载过程 @SpringBootConfiguration,就是一个@Configuration配置类。定义这是一个配置类。 @ComponentScan指定包扫描。扫描@Controller、@Component、@Repository、@Service注解定义的组件,控制翻转放入到容器当中 @EnableAutoConfiguration @AutoConfigurationPackage自动配置包。 @Import(AutoConfigurationPackages.Register.class)利用register,将指定的包下的所有配置类注册到容器中。所以默认包路径是Main程序所在的包。将该包下的所有配置类放入到容器当中。包括@SpringBootConfiguration注解的启动类,这也是系统加载的第一个Configuration组件,放入到容器当中。 @Import(AutoConfigurationImportSelect.class)获取所有导入到容器中的配置类。利用Spring工厂加载器,从spring-boot-a...
06 web开发1-请求映射
web开发 web开发 关键 1 静态资源访问 静态资源访问 欢迎页和图表 自动加载原理 2 请求映射处理 请求映射过程 请求映射原理 请求处理的过程(类层侧结构) 3 请求参数处理 注解请求参数 传入ServletAPI 复杂参数 自定义对象 自定义数据转换器 4 响应数据处理 响应数据 自定义数据转换器 自定义内容协商器 5 视图解析与模板引擎 服务端模板渲染 视图解析原理 关键spring到处都是这种设计模式,设置多个不同的处理器,然后通过遍历循环找到支持当前类型的处理器,如果存在效率问题,则直接将当前条件对应的处理器缓存下来。这也是spring底层提供的大量扩展点。使用到的地方包括: 映射处理器*MappingHandler(找到不同的controller处理请求) 参数解析器*ParamResolver 参数类型转换器*Convertor 返回值处理器*ResultProcessor 返回值消息转换器*MessageConvertor 视图解析器ViewResolver 错误异常处理HandlerExceptionResolvers...













