自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot学习(三)--@Conditional按条件注册

SpringBoot在扫描到META-INFO下的spring.factories下的AutoConfiguration类的时候是怎么去判断是否需要注册这个类的呢?这里就有一个很重要的接口Condition。在SpringBoot中存在大量的条件注解ConditionOnXXX,这些注解在自动配置类的上面都能见到,比如:先看一下SpringBoot中的常用Condition注解:条件化注解配置生效条件@ConditionalOnBean配置了某个特定Bean@Condit

2020-06-20 21:34:25 905

原创 浅析Spring-Mybatis的结合--Mapper接口代理的创建

学习Spring-Mybatis的整合首先需要明白以下几个Spring的扩展点1.@Import2.FactoryBean3.InitializingBean下面是一个简单的Mybatis-Spring查询功能的实现案例:首先看一下@MapperScan

2020-05-31 11:12:32 451

原创 SpringCloud学习(一)——服务治理:Eureka

Eureka主要用来实现各个微服务实例的自动化注册与发现。

2020-04-12 20:52:38 273

原创 数据结构与算法(二)链表

链表一、概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快...

2020-04-06 12:27:07 239

原创 Java中的final使用

基本用法:final可以用来修饰变量,被其修饰的变量被赋初始值后,不能对它重新赋值。

2020-03-29 17:54:41 184

原创 数据结构与算法(一)稀疏数组和队列

线性结构和非线性结构数据结构包括:线性结构和非线性结构。线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。线性结构常见的有:数组、队列、链...

2020-03-24 20:15:23 171

原创 Java中的类

类的定义类的定义由访问级别、类型、类名、是否抽象、是否静态、泛型标识、继承或实现关键字、父类或接口名称等组成。类的访问级别有public和无访问控制符,类型分为class、interface、enum。Java类主要由两部分组成:成员和方法。接口和抽象类定义类的过程就是抽象和封装的过程,而接口和抽象类则是对实体类进行更高层次的抽象,仅定义公共行为和特征。接口和抽象类的共同点是都不能被实例化...

2020-03-19 21:09:24 205

原创 SpringBoot学习(二)--以HttpEncodingAutoConfiguration为例查看自动配置原理

HttpEncodingAutoConfiguration解读先整体看一下HttpEncodingAutoConfiguration的源码: //表明该类为一个配置类@Configuration //启动指定类的ConfigurationProperties功能,将配置文件中对应的值和HttpProperties绑定起来,并将其加入到ioc容器中@EnableConfigurationP...

2020-03-09 20:51:51 317

原创 SpringBoot学习(一)--从HelloWorld入手,解析SpringBootApplication

1.SpringBoot 简介简化Spring应用开发的框架,是整个Spring技术栈的一个大整合,J2EE开发的一站式解决方案2.从简单的Hello Word入手新建一个SpringBoot有两种方法:2.1 Spring官网教程,新建一个HelloWorld的SpringBoot项目2.2 新建一个Maven项目,pom.xml如下<!-- Inherit defaults ...

2020-03-08 22:28:54 378

原创 Spring注解开发之@Configuration解析

在读Spring源码的时候,很多时候能看到Spring内部的一些类,并且一直没捋清楚@Configration配置类的信息是在哪里读取的。下面我们来看一下Spring容器创建时,如何解析@Configuration配置类的。此处以SpringBoot2.1.8版本为例学习相关源码。从启动类开始:SpringApplication.run(Practice09Application.class...

2020-03-08 12:49:17 289

原创 Java中的异常与日志

程序处理异常,需要解决以下三个问题:哪里发生异常?谁来处理异常?如何处理异常?带着这三个问题我们来看一下Java中的异常处理机制。首先需要明确在哪里发生异常。在代码块中通过try-catch来发现异常。在使用try-catch时需要分清稳定代码和非稳定代码,不能大包大揽,将大段代码定义在try-catch块内,非常不利于问题的定位。稳定代码是如何都不会出错的代码,如 int a =...

2020-03-05 21:26:03 556

原创 Spring注解开发(七)Spring容器创建

下图是AnnotationConfigApplicationContext的主要实现及继承类图:从图中可以看到:AnnotationConfigApplicationContext继承GenericApplicationContext这个通用应用上下文,GenericApplicationContext内部定义了一个DefaultListableBeanFactory实例,GenericA...

2020-01-15 22:16:26 332

原创 Java线程池浅析

线程池

2020-01-01 12:13:17 182

原创 七、pipeLine概述

带着下面三个问题,我们开始学习Netty的pipeline:netty是如何判断ChanneHandler类型?对于ChannelHandler的添加遵循什么样的顺序?用户手动触发事件传播,不同的触发方式有什么区别?pipeline的初始化pipeline在创建Channel的时候被创建在前面几节可以看到在服务端和客户端创建Channel的时候会创建Pipeline: pr...

2019-12-29 22:29:55 296

原创 六、Netty新连接介入

121

2019-12-22 21:18:44 197

原创 五、NioEventLoop启动

NioEventLoop执行概述:1.何时被启动当AbstractChannel.register()方法被执行时,该方法下有这样一段代码: if (eventLoop.inEventLoop()) { register0(promise); } else { try { ...

2019-12-20 21:26:17 177

原创 四、Netty简单案例实践及服务端启动流程

首先来看一个简单的Netty服务器和客户端通讯的例子服务器代码如下:public class SimpleNettyServer { public static void main(String[] args) { new SimpleNettyServer(8878).runServer(); } private final int serve...

2019-12-17 23:43:47 382

原创 三、Reactor反应器模式

在OIO模型中,最初的程序设计是监听端口是否有连接,如果有就调用一个函数去处理。这个模式的最大的问题就是,前面的函数没有处理完,会导致后来的连接无法被接受,于是后面的请求都会被阻塞住,服务器的吞吐量被极大的限制。后来采用了ConnectionPerThread(一个线程处理一个连接)模式。解决了前面的新连接被严重阻塞的问题。但是对于大量的连接,需要耗费大量的线程资源。并且线...

2019-12-09 21:24:57 272

原创 二、Java NIO通信基础

JavaNIO属于第三种模型--IO多路复用模型,主要有三个核心组件组成:Channel通道:在NIO中,同一个网络连接使用一个通道表示,所有的NIO的IO操作都是从这个通道开始的。一个通道类似于OIO中的两个流的结合体,既可以从通道中读取,也可以向通道中写入。 Buffer缓冲区:应用程序与通道的主要交互操作就是数据的读写,通道的读取和写入就是将数据与缓冲区的读取和写入。 Selec...

2019-12-05 23:27:22 207

原创 一、 IO 五种模型

IO读写的基础原理:用户程序进行IO的读写依赖于底层的IO读写,涉及到两个缓冲区内核缓冲区和进程缓冲区。缓冲区的目的:减少频换的与设备之间的物理交换。外部设备的直接读写涉及操作系统的中断,发生中断时需要保存之前的进程数据和状态等信息,而结束中断后还需要恢复,为了减少底层系统的时间、性能损耗,出现了内存缓冲区。应用在read系统调用是,仅仅把数据从内核缓冲区复制到应用缓冲区(进程缓冲区)...

2019-11-30 22:02:29 251

原创 Spring注解开发(六)扩展原理

在解析SpringIOC容器创建之前,我们先来看以下扩展原理:1.BeanFactoryPostProcessor2.BeanDefinitionRegistryPostProcessor3.ApplicationListener/@EventListener与SmartInitializingSingleton一、BeanFactoryPostProcessor Bean...

2019-11-26 21:57:48 310

原创 观察者模式(Obeserver Pattern)

观察者模式(Obeserver Pattern)也叫作发布订阅模式(Publish/subscribe),在项目中经常会见到该模式。观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多...

2019-11-24 23:07:39 370

原创 Spring注解开发(五)声明式事务

先看一个简单的例子:新建Dao类,代码如下:@Repositorypublic class PersonDao { @Autowired private JdbcTemplate jdbcTemplate; public void insert() { String sql = "insert into tb_person(personNam...

2019-10-22 23:22:50 188

原创 Spring注解开发(四)AOP原理与源码分析

先来看一个简单的例子:先建一个Person类作为业务类:public class Person { public int doDivision(int a, int b) { return (a / b); }}新建切面类LogWriter,此处只加了两个通知:@Aspect //指定此类为一个切面类public class LogWrite...

2019-10-20 19:13:43 200

原创 Spring注解开发(三)属性赋值与自动装配

新建一个配置类,如下:@Configuration@ComponentScan(value = "com.practice.bean")public class MainConfig { @Bean public Person person() { return new Person(); }}一,@Value赋值1、基本数值,2、S...

2019-10-13 20:29:28 241

原创 Spring注解开发(二)生命周期

一,通过@Bean注解指定初始化和销毁方法<bean id="person" class="com.practice.bean.Person" init-method="" destroy-method="" >和在XML配置文件中的格式一样,在@Bean注解中也有这两个属性String initMethod() default "";String destroyM...

2019-10-11 22:56:22 201

原创 Spring注解开发(一)组件注册

Spring组件注册就是让Spring的IOC容器去管理组件的这个bean,SPring组件基于注解的注册方法主要有以下几种:首先需要一个@Configuration注解的配置类,告诉Spring容器配置的入口,和xml配置文件的功能一样一:@Bean首先新建一个Person类,属性为String:name,Integer:age;新建配置类,代码如下:@Confi...

2019-09-28 22:31:10 206

原创 浅析volatile关键字

Tips:线程安全主要考虑三个方面:1,可见性:多个线程并发的读写某个共享资源时,每个线程总能读取到该共享资源的最新数据。2,原子性:某个线程对一个或多个共享资源所做的一连串写操作不会被中断,在此期间不会有其他线程同时对这些共享资源执行写操作3,有序性:单个线程内的操作必须是有序的。内存可见性问题要理解volatile关键字,首先要了解多线程的内存模型,如下图所示:...

2019-07-23 21:40:22 155

转载 String类和常量池(转)

String类和常量池1、 String对象的两种创建方式:String str1 = "abcd";String str2 = new String("abcd");System.out.println(str1==str2);//false这两种不同的创...

2019-06-04 23:09:51 162

原创 HotSpot虚拟机对象探秘(2)

以常用虚拟机HotSpot和常用的内存区域Java堆为例,探讨对象是如何创建、如何布局以及如何访问这些细节。1.对象的创建①类加载检查 虚拟机遇到一个new指令时,首先会去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有则先执行相应的类加载过程。(当JVM接收到new指令时,首先在metaspac...

2019-06-04 22:55:17 178

原创 Java内存区域概述(1)

运行时数据区域

2019-06-02 21:52:33 181

空空如也

空空如也

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

TA关注的人

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