自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 问答 (1)
  • 收藏
  • 关注

原创 28. Spring源码篇依赖注入之Optional

我们知道,java中的Optional是解决臭名昭著的空指针异常,在spring的依赖注入中,如果没有找到Bean也会抛异常,就算将required写为false,后面也会需要判空在spring中也支持Optional的依赖注入。

2023-11-27 19:45:13 223

原创 27. Spring源码篇之SpEL表达式之自定义解析模版

其实前面文章我们已经介绍过了如何定义spring表达式的解析模版,但是那是直接使用表达式api的形式,对于使用spring的同学来说,更优雅的方式就是可以自定义一个扩展去修改本文就是介绍如何通过Spring的扩展点修改表达式解析模版首先AbstractBeanFactory就有有一个解析器BeanExpressionResolver,这个前面文件介绍过,默认是一个StandardBeanExpressionResolver。

2023-11-27 00:14:10 263

原创 26. Spring源码篇之SpEL表达式的上下文EvaluationContext

上节已经介绍了spring表达式,也举了很多案例,本文是对spring表达式上下文EvaluationContext的一个补充EvaluationContext在spring表达式中非常重要,里面可以定义数据应该从哪里来 比如 @Value(“#{beanName}”),希望应该可以从spring中获取单例Bean,都可以由它实现@Nullable@Nullable该类的一个重要子类就是StandardEvaluationContext,前面我们也介绍了,默认实现就是该类。

2023-11-27 00:13:35 477

原创 25. Spring源码篇之SpEL表达式

Language)表达式简称SpEL表达式,该功能在Spring中实现还是比较复杂,在Spring中单独有一个模块spring-expression来实现,所以本文主要看一小部分的源码,大概知道怎么使用就行了。

2023-11-25 19:00:54 259

原创 24. Spring源码篇之占位符填充${}

在spring中占位符用${}表示,他可以很好的实现将变动的数据与代码分离,这部分变化的数据就可以使用配置文件等诸多手段动态配置spring中的占位符应用的非常广泛,比如@Value注解 @RequestMapping Feign等都支持${}spring为该功能定义了一个接口 StringValueResolver,可以自定义实现类可以通过beanFactory.addEmbeddedValueResolver()设置自己的解析器。

2023-11-25 19:00:24 265

原创 23. Spring源码篇之环境变量Environment

在开发过程中,我们通常会把一些变化的数据,或者说不同环境值不一样的数据抽离出来,代码可以根据需要通过配置动态的方式获取不同的值,这个值可以是在配置文件中,数据库中等在spring中定义了一个统一的环境变量接口 Environment子类关系 StandardEnvironment -> AbstractEnvironment -> ConfigurableEnvironment -> Environment其中StandardEnvironment就是spring中默认使用的。

2023-11-25 18:59:45 164

原创 22. Spring源码篇之推断构造方法

很多时候我们的构造器都不止一个,那么spring怎么选择的呢,签名介绍了推断构造方法的扩展点,可以使用@Autowired注解去选择使用哪个构造器,但是即使这样也有可能有多个Autowired且required为false的构造器,那么还是得选择前面我们介绍过了@Bean的实例化,其实推断构造器的逻辑与其相差不多。以上便是推断构造方法的关键逻辑,因为构造方法可能有多个,这个时候如果指定了参数,那么直接根据指定的参数匹配方法,如果没有指定参数,那么spring会根据评分算法帮我们找出方法。

2023-11-23 09:32:07 170

原创 21. Spring扩展点之推断构造方法

spring自己本身有推断构造方法的逻辑,但同时也提供了扩展,SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors,实现该方法就可以自己定制获取哪个构造器的逻辑,该扩展点spring有一个默认的实现AutowiredAnnotationBeanPostProcessor#determineCandidateConstructors本文主要分析的就是该默认的推断构造方法实现类。

2023-11-22 10:30:51 168

原创 20. Spring源码篇之@Lookup详解

Lookup注解可能平时开发中大家接触的少,但是又确实挺有用的,比如我们一个单例Bean注入了一个原型Bean,原型Bean的效果其实是会失效的,因为单例Bean一开始就实例化好了,后面也不会再变化,但我们可能需要的就是原型Bean呀,那么怎么解决呢,如果注入的是一个动态的就好了,于是我们马上就会想到代理对象,spring中@Lookup就可以帮助我们实现该效果,原理就是生成了一个代理对象。

2023-11-21 19:07:06 295

原创 Go语言中获取IP

在net包中提供了获取所有网卡的ip,一般不会用127.0.0.1,::1这样的本地回环地址,可以过滤掉,如果想要获取当前真正在使用的地址,得通过net.Dail去连一下才知道。

2023-11-21 09:34:59 412

原创 Go语言读取文件内容

读取文件内容在每个语言里面都有,go语言中主要注意文件读完后会返回一个异常 io.EOF,根据这个异常去判断就可以了以上就是go读取文件内容的代码了,平时作为自己的一个小工具库用欢迎关注,学习不迷路!

2023-11-21 09:34:17 269

原创 Go语言中实现应用IP防火墙

在公司里面经常会听到某应用有安全漏洞问题,没有做安全加固,IP防火墙就是一个典型的安全加固解决方案,只允许指定的ip段访问应用,一般是内网ip本文主要讲解go语言如何实现ip防火墙。

2023-11-20 19:45:20 394 2

原创 19. Spring源码篇之@Bean的实例化

前面介绍了@Bean标记的方法如何注册为BeanDefinition,有了 BeanDefinition 后,就能根据其中的信息实例化一个对象在@Bean的BeanDefinition有几个比较重要的属性,一个是 factoryMethodName,一个是 factoryBeanNamefactoryMethodName可以表示该Bean是一个@Bean,而factoryBeanName可以知道该Bean应该由谁来创建。

2023-11-20 15:15:54 151

原创 Go语言中ipv4与Uint32转换

ip对于我们都不陌生,但是如果有一道题目要你判断某个ip在不在一个ip段的范围内,该怎么做呢,要是能把它弄成可比较的数字就好了例如 127.0.0.1如何转数字呢,我们可以把它分成四段 127 0 0 1 每一段转为二进制拼起来 01111111 00000000 00000000 00000001再转成uint32 变为 2130706433,这个时候就是一个数字了。

2023-11-20 09:35:04 349

原创 Go语言中string与byte转换

string与byte的转换是最常见的一种,通常我们会使用强转方式,但其实还有另一种更加高效的方式,本文会演示两种转换方式。

2023-11-20 09:34:32 759

原创 18. Spring类型转换之ConversionService

前面我们讲了PropertyEditor,是jdk提供的类型转换,spring也有自己的类型转换器,比PropertyEditor稍微强大一点。

2023-11-19 22:04:29 532 2

原创 17. Spring类型转换之PropertyEditor

我们之所以使用spring如此的简单,并且功能比较强大,比较人性化,是因为很多重复且繁琐的以及能想到的可以简化业务的功能都给我们默认提供了,类型转化就是典型的例子spring提供了两种类型转化的方式,一种是spring提供的ConversionService,后面一篇文章再讲,另外一种就是本文要介绍的PropertyEditor,它是jdk提供的 java.beans.PropertyEditor,spring自然也要支持。

2023-11-19 22:03:56 277

原创 16. Spring源码篇之指定构造方法参数

为什么讲这个,是因为在spring使用构造方法注入的时候会有大量的判断,是不是指定了参数。如果指定了参数就可以使用不同的构造方法去实例化Bean,本文将介绍如何指定参数。

2023-11-19 21:53:49 179

原创 15. Spring源码篇之获取方法参数名

通常在没有显示的指定beanName的时候,都是会根据要注入的类型以及方法名,属性名或者参数名来找Bean,方法名属性名还好说,但是参数名就有点难获取,jdk也并没有给我们提供获取的方法在Spring中主要以两种方式来获取,一是反射,这种可能获取不到,二是本地变量表,通过asm的方式,这种肯定是可以获取到spring提供的这两种方式我们平时也可以使用,spring中也会大量使用到为了更容易后面看源码,本文西安介绍这两种方式。

2023-11-19 21:43:08 189

原创 14. Spring源码篇之@Bean的注册

我们知道一个Bean都对应了一个BeanDefinition,@Bean最终也会是spring的一个Bean,那么它是如何解析成BeanDefinition以及如何实例化Bean的呢在前面的的分析中我们知道,只要存在@Bean注解了的方法,也是一个配置类@Bean如何向spring源注册Bean,还得从解析配置类开始分析。

2023-11-19 21:32:12 117

原创 13. Spring源码篇之Supplier

Supplier是jdk8支持的新特性,作为对象的提供者,在spring中实例化Bean都是通过反射做到的,其实还是有点性能损耗,Supplier便可以不通过反射拿到,它与工厂方法比较像并且它不影响后面的生命周期。

2023-11-19 18:13:46 128

原创 12. Spring源码篇之创建Bean逻辑doCreateBean

本文只是分析一下doCreateBean的表面代码,其中每块的细节逻辑后续文章分析在看源码中,我们如果看到前面有一个do,不用质疑,一般都是比较重要的方法比如,doScan doGetBean以及doCreateBean通过以上代码,大致逻辑是判断是不是创建过了没有创建那么实例化出来一个bean对象 --实例化逻辑后面文章介绍。

2023-11-19 18:04:53 230

原创 Go语言中获取协程ID

java同事都知道,线程会有对应的id,那么go语言中协程有id吗,其实是有的,但是不建议使用。实在需要使用的话可以使用本文的例子获取。

2023-11-19 17:46:13 1042

原创 11. Spring源码篇之实例化前的后置处理器

spring在创建Bean的过程中,提供了很多个生命周期,实例化前就是比较早的一个生命周期,顾名思义就是在Bean被实例化之前的处理,这个时候还没实例化,只能拿到该Bean的Class对象,如果在这个时候直接返回一个对象,那么就不用spring给我们创建了。

2023-11-19 14:07:52 246

原创 Go实现延期结果处理DeferredResult

学过java SpringBoot的同学应该知道,有一个非常好用的类DeferredResult,他可以设置一个超时时间,如果在超时时间内有结果,那么返回结果,如果延期了,返回预期设置的结果说到这功能就会想到基于长轮训实现的实时消息推送系统,在很多基于spring的框架都用到了该功能在管理程序去做一个monitor,监视某些数据的变化,如果监视的数据有变动,那么直接返回给请求者,如果没有那么告诉请求者一个状态码,让对方立刻重新请求典型的例子有配置中心Apollo。

2023-11-19 14:06:44 165

原创 10. Spring源码篇之BeanPostProcessor

在Bean的创建过程中会有很多的后置处理器,例如实例化前、实例化后、初始化前、初始化后,属性填充等,这些都是通过BeanPostProcessor来实现的那么既然每个Bean都有有这些生命周期,这些BeanPostProcessor肯定需要提前知道,并且实例化出来保存,而我们前面介绍来BeanDefinition的扫描,就可以把所有的Bean找出来,只要在实例化单例Bean之前把BeanPostProcessor实例化好就行了在spring中就有这么一步注册BeanPostProcessor。

2023-11-19 00:35:58 234

原创 9. Spring源码篇之类型匹配isTypeMatch

由于源码会大量用到类型匹配,例如 beanFactory.getBeanNamesForType里面就需要要到,所有先了解下匹配的原理,后续源码分析就轻松些这也是spring提供的一个工具方法,我们也可以使用。

2023-11-18 19:58:26 197

原创 8. spring源码篇只Scope

我们常见的Bean有单例Bean与多例Bean,但其实scope还有有一些其它的值,如果只是使用简单的spring就只有这些,但是要是使用SprigBoot或者SpringMvc,那么就就还会有一些其它的比较常用的值,例如由上面代码分析,自定义scope只需要实现org.springframework.beans.factory.config.Scope就行spring提供了一个SimpleThreadScope,我们就使用它,不重新写了SimpleThreadScope代码如下。

2023-11-18 16:43:00 102

原创 7. spring源码篇之DependOn

很多时候一个Bean需要依赖另一个Bean先实例化,例如一个BBean实例化设置了一个全局属性,而ABean恰好需要依赖于这个属性,没有就报错,但是这个顺序自己是把握不了的,这个时候就可以使用DependOn。

2023-11-18 15:24:09 103

原创 6. Spring源码篇之FactoryBean

在介绍实例化非懒加载的单例Bean之前,先了解一下FactoryBean这是spring提供的一个非常重要的功能,是一个小型的工厂,可以灵活的创建出需要的Bean,在很多框架与spring整合的过程中都会用到,例如Mybatis-plus,需求是写一个Mapper注解就能成为Spring的Bean,那么这种批量动态生产Bean的功能就需要用到FactoryBean。

2023-11-18 15:06:34 229

原创 5. Spring源码篇之BeanDefinition

在spring中BeanDefinition是一个接口,下面也有很多的实现类大致如下RootBeanDefinition 最终每个BeanDefinition都是一个 RootBeanDefinitionChildBeanDefinition 现在不用了废弃,现在使用的都是 GenericBeanDefinitionGenericBeanDefinition 我们定义的一般都是 GenericBeanDefinition。

2023-11-17 20:09:46 168

原创 4. Spring获取元数据信息MetadataReader

由于前面文章看源码时看到了MetadataReader,本文就简单介绍一下在spring中会大量用到MetadataReader,spring在实例化单例Bean之前,为什么也能拿到类的元数据信息,包括注解信息等。原因就是用到了MetadataReader,而MetadataReader使用的是Asm技术 (通过SimpleAnnotationMetadataReadingVisitor可以知道使用的是ASM技术)

2023-11-17 17:38:51 198

原创 6. hdfs的命令操作

本文主要介绍hdfs通过命令行操作文件操作文件有几种方式,看个人习惯hdfs dfshdfs fshadoop fs个人习惯使用 hadoop fs 可操作任何对象,命令基本上跟linux命令一样hdfs对文件常用的操作大致就是这些,后面我们开始yarn的部署欢迎关注,学习不迷路!

2023-11-17 17:21:00 190

原创 5. hdfs的界面详解

hdfs 提供了一个比较有好的web-ui界面,开启配置如下在hdfs-site.xml添加</</</访问,hadoop01:50070。

2023-11-17 15:56:49 396

原创 3. Spring源码篇之ComponentScan

前面介绍了scanner可以扫描某个包路径下的所有bean,我们最常用的也是通过ComponentScan指定包路径去扫描,在SpringBoot中也是如此,本文将介绍spring扫描的逻辑。

2023-11-17 09:35:16 89

原创 4. hdfs高可用集群搭建

前面把hadoop机器已经准备好了,zk集群搭建好了,本本就是开始搭建hdfs环境hadoop环境准备hdfs的部署就到这了,下节我们开始简单使用hdfs欢迎关注,学习不迷路!

2023-11-16 20:38:53 149

原创 3. hdfs概述与高可用原理

以上就是对hdfs的介绍,后面文章将不再介绍,直接实战欢迎关注,学习不迷路!

2023-11-16 19:44:33 124

原创 2. zk集群部署

上一篇文章我们已经把环境准备好了,jdk也配置好了,下面我们开始把zk部署起来hadoop环境准备到此zk集群就已经搭建完毕,下节开始搭建hdfs欢迎关注,学习不迷路!

2023-11-16 19:43:24 164

原创 1. hadoop环境准备

hadoop主机环境准备

2023-11-16 19:41:01 880

原创 2. Spring源码篇之Reader与Scanner

Bean的扫描与注册

2023-11-15 16:15:12 82

kube-dashboard的yaml配置

k8s的监控界面,由于国内下载很慢,这里我提供一个已经下载好了的文件 使用 kubectl apply -f kube-dashboard.yml 就可以部署完成

2022-11-03

kube-flannel的yaml文件

kube-flannel网络插件,国内下载会比较慢,这里我提供一个已经下载好了的文件 使用 kubectl apply -f kube-flannel.yml 就可以部署完成

2022-11-03

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

TA关注的人

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