自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

架构师:通透,才能写出好代码!

也许当我老了,也一样写代码。不为别的,只为爱好。

  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java中创建对象的5种方式,你都知道几种?【享学Java】

前言说起Java创建的对象一共有多少种方式这个问题,还是曾经有一次面试的时候被问起的。作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:创建对象的工作交给Spring。那么连使用new关键字创建对象都离我们渐行渐远的今天,你是否知道Java中创建对象有哪些种方式呢?本文将介绍5种方式来创建一个java对象:new关键字Class.newInstan...

2019-06-30 20:33:18 1281

原创 Java单例模式的7种写法中,为何用Enum枚举实现被认为是最好的方式?【享学Java】

前言如果看到标题就能白表示赞同的小伙伴,那肯定看过Joshua Bloch大神说过的这么一句话:单元素的枚举类型已经成为实现Singleton的最佳方法。翻译成人话就是:实现单例模式的最佳方法是使用枚举。单例模式单例模式(Singleton Pattern):确保一个类有且只有一个实例,并提供一个全局访问点。有一些对象其实我们只需要一个,例如:线程池(threadpool)、缓存(cach...

2019-06-30 18:18:05 1570

原创 Java中的引用类型(强引用、软引用、弱引用、虚引用)介绍,示例WeakHashMap的使用【享学Java】

Java语言中的数据类型可划分为`值类型`和`引用类型`。从`JDK 1.2`版本开始,把对象的引用分为**4种级别**,从而使程序能**更加灵活地**控制对象的生命周期。这4种级别由**高到低依**次为:**强引用、软引用、弱引用和虚引用**。

2019-06-30 14:07:17 1651 2

原创 那些年我们在Java泛型上躺过的枪---万恶的泛型擦除【享学Java】

泛型(`Generics`),从字面的意思理解就是泛化的类型,即**参数化类型**。我们都知道,泛型是`JDK5`提供的一个非常重要的新特性,它有非常多优秀的`品质`:能够把很多问题从运行期提前到编译器,从而使得程序更加的健壮。但是因为Java5要保持良好的向下兼容性,所以从推出之际一直到现在,它都是个`假东西`:只在编译期存在,编译成`.class`文件后就不存在了,这就是所谓的`泛型擦除`。

2019-06-29 22:32:12 898 1

原创 聊聊java中的多继承,解决Java8接口default方法多继承冲突问题【享学Java】

前言众所周知,Java是一种面向对象的只允许单继承的语言,这是每个Java程序员从业者都知道定理。本文的目的,主要从两个方面来思考Java单继承的这个问题:为什么Java类被设计为只能单继承?怎样曲线实现多继承的效果?Java类为何设计为只能单继承?我们都知道Java的主要设计者是James Gosling,下面我引用它的一段话来对Java语言进行定义:Java是一种简单的,面...

2019-06-29 12:59:50 3267 6

原创 JDK基础类库java.util包下那些你可能不知道的工具们大盘点(一)EnumMap、EnumSet【享学Java】

前言聊了很长时间逻辑性非常强的Spring框架,这篇文章来些轻松点的内容:聊聊JDK中那些你可能不知道的工具。正所谓玩好JDK,面试不用愁。那么JDK好掌握吗,答案是非常难。大家平时理解的JDK可能就只是指的它的基础类库部分,但其实此处可扫盲一下。JDK主要包含有如下三个部分:Java运行时环境(JRE),说白了就是JVMJava的基础类库(它数量可观,功能强大,覆盖面广。对开发者来说...

2019-06-29 11:10:17 900

原创 聊聊Spring的bean覆盖(存在同名name/id问题),介绍Spring名称生成策略接口BeanNameGenerator【享学Spring】

前言我们知道Spring容器可以简单粗暴的把它理解成一个大大的Map,它里面存储着容器所管理的所有的单实例对象,从我们使用getBean(String beanName)使用bean名称就能获取到唯一一个Bean实例就能“证明”这一点。可你是否曾想过:既然它是Map,那万一我们写的@Bean的beanName重名了怎么办呢?Spring框架是怎么来处理这个事的呢?Spring容器简单描述M...

2019-06-27 20:46:09 12773 2

原创 Spring依赖注入@Autowired深层原理、源码级分析,感受DI带来的编程之美【享学Spring】

前言

2019-06-26 16:07:14 2410 5

原创 Spring依赖注入(DI)核心接口AutowireCandidateResolver深度分析,解析@Lazy、@Qualifier注解的原理【享学Spring】

前言关于AutowireCandidateResolver接口,可能绝大多数小伙伴都会觉得陌生。但若谈起@Autowired、@Primary、@Qualifier、@Value、@Lazy等注解,相信没有小伙伴是不知道的吧。AutowireCandidateResolver用于确定特定的Bean定义是否符合特定的依赖项的候选者的策略接口。这是该类的Javadoc对此接口的定义,是不是有点...

2019-06-26 10:52:52 6252 7

原创 从@Async案例找到Spring框架的bug:exposeProxy=true不生效原因大剖析+最佳解决方案【享学Spring】

前言从本文标题就能看到靓丽的字眼:Spring框架bug。相信有的小伙伴心里小九九肯定会说:又是一篇标题党文章。此处可以很负责人的告诉大家:本人任何文章绝不哗众取宠,除了干货还是干货。相信关注过我的小伙伴都是知道的,我只递送干货,绝不标题党来浪费大家的时间和精力~那无异于谋财害命(说得严重了,不喜勿喷)本篇文章能让你知道exposeProxy=true真实作用实际和作用范围,从而能够更精...

2019-06-24 20:34:51 4978 11

原创 使用@Async异步注解导致该Bean在循环依赖时启动报BeanCurrentlyInCreationException异常的根本原因分析,以及提供解决方案【享学Spring】

前言今天在使用@Async的时候,碰到了一个问题:Spring循环依赖(circular reference)问题。或许说到这,有的小伙伴就会大惊失色了。Spring不是解决了循环依赖问题吗,它是支持循环依赖的呀?怎么会呢?说实话在这之前我也这么坚信的,而且每次使用得也屡试不爽。如果你目前也和我的想法一样的坚挺,那么相信本文能让你收获不少。Spring循环依赖最经典的一个案例:自己引用自己...

2019-06-24 09:17:21 23170 51

原创 熟练使用IDEA的断点调试(Breakpoint),大大提升你调试代码的效率(行断点、属性断点、异常断点、条件断点、远程debug...)【享学Java】

前言断点调试是每个**程序猿(媛)**从业者避不开的技能之一,它到底有多重要呢?为了体现本文的重要性,我引用几个大佬的话来表达断点调试的重要性:调试技巧比编码技巧更为重要,因为花费在调试上的时间往往比编码还多,学到的东西比编码中学到的还多调试技能重要性甚⾄超过学习⼀门语⾔不会调试的程序员,肯定编制不出任何好的软件因此:调试是一个程序员最最最基本的技能。...

2019-06-21 15:32:53 14339 9

原创 一文告诉你Spring是如何利用“三级缓存“巧妙解决Bean的循环依赖问题的【享学Spring】

前言循环依赖:就是N个类循环(嵌套)引用。通俗的讲就是N个Bean互相引用对方,最终形成闭环。用一副经典的图示可以表示成这样(A、B、C都代表类,虚线代表引用关系):注意:其实可以N=1,也就是极限情况的循环依赖:自己依赖自己另需注意:这里指的循环引用不是方法之间的循环调用,而是对象的相互依赖关系。(方法之间循环调用若有出口也是OK的)可以设想一下这个场景:如果在日常开发中我们...

2019-06-19 22:39:19 41935 127

原创 详解Spring Framework提供的扩展点:ApplicationContextInitializer应用上下文初始化器,以及它在SpringBoot中的应用【享学Spring】

前言我事前百度了一下ApplicationContextInitializer的相关文章,无一例外全部是基于SpringBoot进行讲解的。殊不知,这个类属于Spring Framework的而并不属于SpringBoot,我认为开门见山就在SpringBoot里讲解是不太妥的,毕竟想要理解好SpringBoot,先了解Spring Framework才是第一位以本文讲解Application...

2019-06-18 11:58:47 2243 2

原创 3种方式实现多数据源控制/切换、实现读写分离;演示借助AbstractRoutingDataSource实现多数据源的动态切换代码【享学Spring】

前言什么时候一个Java工程里需要控制多个数据源呢?我认为有如下两种情况:业务需要。比如项目里要实现两个DB的双写/数据迁移,或者微服务边界划分不清使得一个工程直链了多个DB读写分离。现在稍微大型一点的网站,为了提升DB的吞吐量和性能,数据库一般都会采用集群部署(1个Master+N个Slave模式)。不管是什么原因我们需要控制多个数据源,在技术实施层面上都是一样的。因此下面主要以最为...

2019-06-17 14:15:36 1912 1

原创 Spring事务监听机制---使用@TransactionalEventListener处理数据库事务提交成功后再执行操作(附:Spring4.2新特性讲解)【享学Spring】

前言从标题就可以看出,本篇文章内容既和Spring的事件/监听机制有关,同时还和Spring事务以及Spring事务同步机制有关。为了给这篇文章铺好路,建议可以先了解下:Spring事件监听机制:【小家Spring】从Spring中的(ApplicationEvent)事件驱动机制出发,聊聊【观察者模式】【监听者模式】【发布订阅模式】【消息队列MQ】【EventSourcing】…Spr...

2019-06-14 18:08:23 15573 3

原创 Spring是如何保证同一事务获取同一个Connection的?使用Spring的事务同步机制解决:数据库刚插入的记录却查询不到的问题【享学Spring】

前言关于Spring的事务,我前面用了大量的篇幅从应用层面、原理层面都进行了比较全方位的一个讲解。但是因为它过于重要,所以本文继续做补充:Spring事务的同步机制Spring事务同步机制?我猜测很多小伙伴从来没听过有这么一说法,毕竟它在平时开发中你可能很少遇到(如果你没怎么考虑过系统性能的话)。让我记录本文的动力是由于我在开发自己测试过程中遇到这样一个诡异异常:java.sql.SQLE...

2019-06-13 12:39:25 9496 21

原创 详解PropertyPlaceholderConfigurer、PropertyOverrideConfigurer等对属性配置文件Properties的加载和使用【享学Spring】

前言本文主要从PropertyResourceConfigurer出发,主要聊聊由它衍生出来的一些实用API。Spring的PropertyResourceConfigurer是个抽象类,继承自PropertiesLoaderSupport,并实现了接口BeanFactoryPostProcessor。此处注意:它是个Bean工厂的后置处理器,而不是Bean的后置处理器它抽象了容器启动...

2019-06-11 21:56:03 3210 2

原创 Spring中PropertySource属性源配置文件的优先级、顺序问题大解析(加载流程)【享学Spring】

前言我相信关于Spring的配置文件的优先级、加载顺序一直是个老生常谈的问题,即使经常被提起,但却还是一个非常容易就被遗忘或者弄混的知识点。如果你度娘上去搜索:Spring Boot 配置顺序等关键字,会发现解释的文章非常之多,但每每够是过眼云烟,事后没多久就忘了。我个人经验总结若想把这块变成永久记忆,一种方式就是理解作者的设计意图,掌握设计思想。另外一种就是把它落实在源码上,毕竟查源码找顺...

2019-06-11 14:57:07 8713

原创 关于Spring属性处理器PropertyResolver以及应用运行环境Environment的深度分析,强大的StringValueResolver使用和解析【享学Spring】

前言若直接说PropertyResolver或者StringValueResolver可能很多人都会非常的陌生,但是我若提到EmbeddedValueResolverAware这个Spring为我们提供的感知接口,相信很多小伙伴就会感到亲切了。我们的任何一个Bean实现了EmbeddedValueResolverAware接口的话,Spring容器再启动的时候就会自动给我们set进来一个Str...

2019-06-10 18:52:59 9582 9

原创 使用commons-configuration2读取properties、yaml、xml配置文件,实现配置文件的热更新【享学Java】

`Commons Configuration`作为一个优秀的配置管理库,凭借着优秀的设计以及提供了热加载等使用功能,被不少其它组件作为基础配置管理组件使用,流行度较高。从2004年发展至今,它一共有两个大版本:1.x和2.x。这两个大版本之前因为改过包名,并且GAV坐标也不一样,因此他俩:**互不兼容,可以共存**。虽然2.x早已成为主流,但前面解释过1.x版本也有学习的意义,所以避免不了共存的情况。因此本文将从多个方面,站在使用的角度比较两者的诸多不同,让同学们可以同时驾驭。

2019-06-10 15:07:12 3518

原创 【小家Spring】Spring中@Value注解有多强大?从原理层面去剖析为何它有如此大的“能耐“

前言@Value注解是Spring3.0后提出来的一个注解。注解内容本身非常之简单,但是它提供的功能非常之强大。首先从它的注解定义知道,它能使用在:字段上set方法上方法入参上当作元注解它的功能大致可归类为:注入普通字符串书写SpEL表达式(功能强大包括:获取系统属性、调用静态方法、计算、注入bean、调用bean的方法等等~~~)注入Resource。如:@Value(...

2019-06-07 16:34:39 12305 6

原创 【小家Spring】SpEL你感兴趣的实现原理浅析spring-expression~(SpelExpressionParser、EvaluationContext、rootObject)

前言Spring Expression Language(简称 SpEL)是一个支持查询和操作运行时对象导航图功能的强大的表达式语言。它的语法类似于传统 EL,但提供额外的功能,最出色的就是函数调用和简单字符串的模板函数。这不得不介绍的SpEL的概念。EL:Expression Language。我们熟悉的还有比如JSP中的EL表达式、Struts中的OGNL等等。既然有了它们,为何还要SpE...

2019-06-07 15:09:32 18086 9

原创 【小家Spring】聊聊Spring中的格式化:Formatter、AnnotationFormatterFactory、DateFormatter以及@DateTimeFormat...

前言

2019-06-04 15:51:48 2770 1

原创 【小家Java】聊聊Java中的比较器(排序):Comparable和Comparator;Spring中的Comparators和AnnotationAwareOrderComparator

前言“顺序“在任何一个领域里都是非常重要的一个概念,程序也不例外。不同的执行顺序,能对你的执行结果产生直接影响。既然涉及到顺序,那就要求排序。所以本文讨论的就是排序中使用到的比较器Comparable和Comparator。Comparable和Comparator都是java.包下的两个接口,从字面上看这两个接口都是用来做比较用的,但是jdk里面不可能定义两个功能相同的接口,所以他们肯定有...

2019-06-03 19:26:39 1493

原创 【小家Spring】聊聊Spring中的数据转换:Converter、ConversionService、TypeConverter、PropertyEditor

前言前面聊了HttpMessageConverter,它的名称叫消息转换器,所以它面向的是消息体,和Http强相关,所以该接口所在的包为:org.springframework.http.converter数据转换,顾名思义就是数据类型之间的转换,但是对于数据转换,有的是可以进行转化的,例如字符串转整型,但是有些数据类型之间是不能进行转换的,例如从“aaa”字符串到整型的转换。不同的框架,肯...

2019-06-03 10:51:50 11495 2

YourBatman的端午节祝福:代码雨可执行jar包

一年一度的端午节到了,基于Java的AWT写了一个“代码雨”,寄托笔者对大家的祝福,这是可执行jar包,下载下来直接执行"java -jar codeRainApp.jar"即可运行看到效果

2022-06-03

空空如也

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

TA关注的人

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