自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 设计模式之简单工厂模式

设计模式之简单工厂模式 介绍 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 回到模板方法模式的例子, ...

2021-09-26 15:17:39 303

原创 SpringCloud之feign的使用以及源码解析

SpringCloud之feign的使用以及源码解析 feign的作用 Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方 法,更感知不到这是个 HTTP 请求。它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,而不 需要通过常规的 Http Client 构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法 一样,无需关注与远程的交互细节,更无需关注分布式环境开发。 feign的使用 main方法上加上注

2021-09-17 23:28:12 396

原创 设计模式之模板方法模式

模板方法设计模式 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 举之前公司的一个例子来说明。例如坐飞机时候的值机,选座,托运行李这3个业务场景。 大概就能抽象出3个方法, 1.queryPersonInfo(),查询出需要办理业务的人是哪个 2.checkLimit(),检查这个场景是否满足要求 3.dobiz(),真正的业务处理。 先上一下代码,定义了一个

2021-09-16 23:28:19 193

原创 SpringCloud之ribbon的使用以及源码解析

ribbon与feign源码解析 ribbon简介 ribbon是一个客户端的负载均衡工具,Ribbon客户端组件提 供一系列的完善的配置,如超时,重试等。通过Load Balancer获取到服务提供的所有机器实例, Ribbon会自动基于某种规则(轮询,随机)去调用这些服务 ribbon的使用 new出来一个RestTemplate,然后上面加上@LoadBalanced @Configuration public class RestTemplateConfig { @Bean @Lo

2021-09-15 23:43:12 536

原创 SpringAop源码解析

SpringAop源码解析(基于springBoot) 要读懂SpringAop,首先需要看springIoc,否则连入口代码都找不到。 首先我们先看一下一个bean被初始化的过程,简化版。 一个简单的bean会通过反射被实例化出来,然后进行属性的填充,执行init方法,然后bean放到sinletonObjects里面,能通过getBean方法拿出来。但需要创建代理的bean在执行完init方法后,会经过一个特殊的beanPostProcess把bean变成一个代理类,放到sinletonObjects

2021-09-05 22:19:53 285 1

原创 Spring全注解解析

Spring注解 @Configuration,@Bean, @Configuration public class MainConfig { @Bean public Person person(){ return new Person(); } } @Configuration,相当于以前的xml配置的beans标签,@Bean,就是调用@Bean标注的方法,往beanFactory注册这个bean。bean的默认名字是方法名,假如想指定bean的名字,使用@Bean(value=“XXX”)。 @S

2021-09-02 22:18:56 142

原创 设计模式之代理模式

设计模式之代理模式 代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。这种类型的设计模式属于结构型模式。 比如一个餐厅要上线外卖功能,第一种方法是有顾客自己打电话到餐厅,进行点餐。但可能很少人知道能餐厅上线了外卖功能。第二就是在美团上上线外卖功能上美团,美团帮餐厅去接单。 代理又分两种,静态代理和动态代理; 静态代理在程序运行前,代理类已经提前写好。 动态代理则是在程序运行时,动态的创建代理类。其中又分为JDK动态代理和CGLIB动态代理,JDK动态代理是基于接口进行代理

2021-09-01 22:57:29 126

原创 设计模式之观察者模式

设计模式之观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 其特点是: 持有监听的观察者的引用 支持增加和删除观察者 主题状态改变,通知观察者 首先我们举一个例子:大雄和胖虎在看一部电影,当一个精彩的武打戏出现的时候,大雄因为害怕,会闭上眼睛,但胖虎会为这个打戏的精彩而大声叫好。这个时候我们就可以使用到我们的观察者模式。JDK自带了观察者模式的实现 我们先上代码,首先是一个main函

2021-08-17 22:37:36 189

原创 SpringMVC总体流程与源码分析

SpringMVC SpringMVC总体流程图 首先请求进入DispatcherServlet 由DispatcherServlet 从HandlerMappings中提取对应的Handler 此时只是获取到了对应的Handle,然后得去寻找对应的适配器,即:HandlerAdapter 拿到对应HandlerAdapter时,这时候开始调用对应的Handler处理业务逻辑, 执行完成之后返回一个ModeAndView 这时候交给我们的ViewResolver通过视图名称查找出对应的视图然后返回 最后

2021-08-17 16:58:06 106

原创 kafka学习笔记

kafka基于发布订阅的消息队列,需要消费者主动的到队列里面获取,一个分区对应消费组的一个消费者 kafka的启动 首先,修改%KAFKA_HOME%\conf\zookeeper.properties中的dataDir=/tmp/zookeeper,改为dataDir=/mnt/d/ubuntuSoft/kafka_2.12-0.11.0.0/data/zookeeper。 创建新目录D:\ubuntuSoft\kafka_2.12-0.11.0.0\data\zookeeper。 执行命令行

2021-08-16 15:58:35 319

原创 netty中NioEventLoop工作流程

netty中NioEventLoop工作流程 首先先看一幅图 可以看到: 1)Netty抽象出两组线程池 BossGroup 专门负责接收客户端的连接, WorkerGroup 专门负责网络的读写 2)BossGroup 和 WorkerGroup 类型都是 NioEventLoopGroup 3)NioEventLoopGroup 相当于一个事件循环组, 这个组中含有多个事件循环 ,每一个事件循环是 NioEventLoop 4)NioEventLoop 表示一个不断循环的执行处理任务的线程, 每个Ni

2021-07-13 11:17:43 312

原创 Netty服务端启动

Netty服务端启动 样例来自于netty源码的example.echo的EchoServer public static void main(String[] args) throws Exception { // Configure SSL. final SslContext sslCtx; if (SSL) { SelfSignedCertificate ssc = new SelfSignedCertificate();

2021-07-07 17:17:46 296 1

原创 mysql主从复制原理以及如何搭建mysql主从

mysql主从复制原理以及如何搭建 MySQL 复制过程分成三步: 1.master 将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events; 2.slave 将 master 的 binary log events 拷贝到它的中继日志(relay log); 3.slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化的 复制的基本原则 (1)每个 slave 只有一个 master (2)每个 slave

2021-06-05 22:06:00 126

原创 mysql索引原理以及如何正确使用索引

mysql索引 什么是索引 索引的本质其实就是排好序的快速查找数据结构,就像查字典,你可以根据拼音去快速的检索你所需要查询的汉字。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以文件形式存储在硬盘上。 如图就是我们的B+树,mysql最常用的索引。 根据B+树的特性,例如我们需要查找9这个数据,先去找根节点磁盘块1,9小于17,所以在P1,再查找P1所在的磁盘块2,9大于8,所以再找到磁盘块2中的P2,找到P2所在的磁盘块6,然后就找到了9了。 mysql的索引分类: 单值索引:即一个索引只

2021-06-05 21:34:20 354 1

原创 mybatis结合spring执行Sql的流程

mybatis执行Sql的流程 首先讲上一篇出现过的一段代码new SqlSessionTemplate public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { if (!this.externalSqlSession) { this.sqlSession = new SqlSessionTemplate(sqlSessionFactory); } } 进入new SqlSessio

2021-05-26 14:44:59 573

原创 spring和mybatis整合源码解析

springboot和mybatis整合源码解析 使用的是我们springboot,所以我们先要创建一个config类 @Configuration//指定这是一个核心配置类 @MapperScan("com.demo.dao")//扫描dao层,生成动态代理 @ComponentScan("com.demo")//扫描该路径下所有类上的注解 @EnableTransactionManagement//开启事务 @EnableAspectJAutoProxy public class Application

2021-05-23 20:54:41 292

原创 Springboot如何实现自动装配

Springboot如何实现自动装配 首先附上springboot启动的整理流程图,可以发现实现自动装配的主要是里面的两个流程prepareContext()和refreshContext()。 下面就让我们进入这两个方法,去分析spring如何完成自动装配。 prepareContext() prepareContext里面的核心方法是load(context, sources.toArray(new Object[0]));, sourcce就是我们的main函数所在的类。 创建一个loader用于

2021-05-21 22:54:48 618

原创 Spring如何解决循环依赖

Spring如何解决循环依赖 先建立循环依赖的demo代码 dao中引用了service,service引用了dao。 Dao代码 @Component public class MyDao { @Autowired MyService service; public MyService getService() { return service; } public void setService(MyService service) { this.service = servic

2021-05-19 16:39:14 190

原创 Spring提供的扩展点以及案例

Spring提供的扩展点以及案例 1 BeanFactoryPostProcessor /** * spring的扩展点之一 * 实现该接口,可以在spring的bean创建之前修改bean的定义属性。 * spring允许BeanFactoryPostProcessor在容器实例化任何其它bean之前读取配置元数据, * 并可以根据需要进行修改,例如可以把bean的scope从singleton改为prototype,也可以把property的值给修改掉。 * 可以同时配置多个BeanFacto

2021-05-18 17:53:32 486

原创 基于注解的spring源码解析之读懂refresh方法之finishBeanFactoryInitialization(beanFactory)

基于注解的spring源码解析之读懂refresh方法之finishBeanFactoryInitialization(beanFactory) 接着上一篇文章,BD里面现在有8个属性 实例化bean 进入finishBeanFactoryInitialization(beanFactory)方法, 安装流程图一路点进去,获得bean的构造方法,然后进行实例化。 填充属性 populateBean(beanName, mbd, instanceWrapper); ...

2021-05-17 21:47:06 183

原创 基于注解的spring源码解析之读懂refresh方法之invokeBeanFactoryPostProcessors()

基于注解的spring源码解析之读懂refresh方法之invokeBeanFactoryPostProcessors() 进入方法invokeBeanFactoryPostProcessors() protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) { //获取自定义的,手工add进去list的beanFactoryProcessors PostProcessorR

2021-05-17 14:55:50 126

原创 基于注解的spring源码解析之读懂refresh方法,refresh方法的总体流程

基于注解的spring源码解析2-读懂refresh方法 ynchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. ////准备工作包括设置启动时间,是否激活标识位, // 初始化属性源(property source)配置 prepareRefresh(); // Tell the subclass to refresh the internal bean fact

2021-05-17 11:30:24 349 1

原创 基于注解的spring源码解析之总体流程

基于注解的spring源码解析1-总体流程## 总体流程图 Demo代码 public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class); MyService service = (MyService) context.getBean("serv

2021-05-17 11:05:16 194

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除