Spring、SpringBoot及微服务
文章平均质量分 73
Spring、SpringBoot及微服务的个人学习笔记
jazon@
芜湖
展开
-
ApplicationContext--容器的功能扩展
ApplicationContext--容器的功能扩展原创 2022-08-28 22:04:46 · 224 阅读 · 1 评论 -
Spring源码--Bean的加载
Spring的BeanFactory进行bean加载原创 2022-08-28 19:19:40 · 466 阅读 · 0 评论 -
Spring源码--容器的基本实现与BeanDefinition
spring基础原创 2022-08-28 19:12:34 · 295 阅读 · 0 评论 -
Java的桥接方法和BridgeMethodResolver使用
什么是桥接方法桥接方法是JDK1.5引入泛型之后,为了使Java的泛型方法生成的字节码和1.5版本前的字节码相兼容,由编译器自动生成的方法。对于实现了泛型接口或继承了泛型抽象类的类,如果没有桥接方法,则在编译器对泛型进行擦除后,不符合语义:泛型擦除后,泛型类型成了Object,如果子类没有一个对应的桥接方法(泛型类型成了Object的方法),则认为是不符合语义,且不兼容1.5之前的字节码了。同样子类的返回值如果是父类的返回值的子类型,也需要一个桥接方法。什么时候生成桥接方法方法重写的时候子父类返回原创 2021-11-07 11:23:49 · 551 阅读 · 1 评论 -
SpEl及@Value的SpEl表达式源码分析
文章目录SpEl使用例子@Value使用SpEl解析源码分析SpEl使用例子public class SpElDemo { public static void main(String[] args) { Stu stu = new Stu(); stu.setName("xxl"); SpelExpressionParser spelExpressionParser = new SpelExpressionParser(); S原创 2021-11-07 11:18:05 · 444 阅读 · 0 评论 -
Spring(十六)--Spring应用上下文生命周期
Spring应用上下文启动准备阶段AbstractApplicationContext#prepareRefresh()方法1.启动时间startupDate2.状态标识closed、active3.初始化PropertySources-initPropertySources()4.检验Environment中必须属性5.初始化事件监听器集合6.初始化早期Spring事件集合BeanFactory创建阶段AbstarctApplicationContext#obtainFreshBe原创 2021-10-11 23:18:10 · 183 阅读 · 0 评论 -
Spring(十五)--SpringEnvironment抽象
理解SpringEnvironment抽象统一的Spring配置属性管理SpringFramework3.1开始引入Environment抽象,它统一Spring配置属性的存储,包括占位符处理和类型转换,不仅完整地替换PropertyPlaceholderConfigurer,而且还支持更丰富的配置属性源。条件话SpringBean装配管理通过EnvironmentProfiles信息,帮助Spring容器提供条件化装配Bean。SpringEnvironment接口使用场景用于属性占原创 2021-10-11 23:17:58 · 143 阅读 · 0 评论 -
Spring(十四)--Spring事件
Java事件/监听器编程模型设计模式–观察者模式扩展1.可观察对象–java.util.Observable2.观察者–java.util.Observer标准化接口1.事件对象–java.util.EventObject2.事件监听器–java.util.EventListenerSpring标准事件–ApplicationEventjava标准事件 java.util.EventObject扩展,扩展特性:事件发生时间戳Spring应用上下文ApplicationEvent扩原创 2021-10-11 23:13:20 · 134 阅读 · 0 评论 -
Spring(十三)--Spring泛型处理
Java5类型接口-java.lang.reflect.TypeJava泛型反射APISpring泛型类型辅助类核心API-org.springframework.core.GenericTypeResolver1.处理类型相关(Type)相关方法resolveReturnType: 获取方法返回值的TyperesolveType:2.处理泛型参数类型(ParameterizedType)相关方法resolveReturnTypeArgument: 获取方法返回值的泛型参数.原创 2021-10-11 23:11:26 · 501 阅读 · 0 评论 -
Spring(十二)--Spring类型转换
Spring类型转换的实现基于JavaBeans接口的类型转换实现:基于java.beans.PropertyEditor接口扩展Spring 3.0+通用类型转换实现使用场景基于JavaBeans接口的类型转换核心职责: 将String类型的内容转换为目标类型的对象扩展原理1.Spring框架将文本内容传递到PropertyEditor实现的setAsText(String)方法。2.PropertyEditor#setAsText(String)方法实现将String类型转化为原创 2021-10-11 23:11:13 · 954 阅读 · 0 评论 -
Spring(十一)--Spring数据绑定
Spring数据绑定使用场景Spring BeanDefinition到Bean实例创建Spring数据绑定SpringWeb参数绑定Spring数据绑定组件标准组件: org.springframework.validation.DataBinderWeb组件1.org.springframework.web.bind.WebDataBinder2.org.springframework.web.bindServletRequestDataBinder3.org.springfr原创 2021-10-11 23:07:14 · 363 阅读 · 0 评论 -
Spring(十)--Spring校验
Spring校验使用场景Spring常规校验Spring数据绑定SpringWeb参数绑定SpringWebMVC/SpringWebFlux处理方法参数校验Validator接口设计接口的职责: Spring内部校验器接口,通过编程的方式校验目标对象核心方法supports(Class): 校验目标类能否校验validate(Object, Errors): 校验目标对象,并将校验失败的内容输出至Errors对象配套组件错误收集器: org.springframewor原创 2021-10-11 22:58:36 · 638 阅读 · 0 评论 -
Spring(九)--Spring国际化
Spring国际化接口核心接口: org.springframework.context.MessageSource主要概念: 1.文案模板编码code 2.文案模板参数args 3.区域Locale层次性MessageSourceSpring国际化的实现类都是层次性的,具体接口如下Spring层次化国际化接口: org.springframework.context.HierarchicalMessageSrouceJava国际化标准实现抽象实现-java.util.Resou原创 2021-10-11 22:58:22 · 431 阅读 · 0 评论 -
Spring(七)--Spring配置元信息
Spring Bean配置元信息Bean配置元信息-BeanDefinition : 1. GenericBeanDefinition:通用型BeanDefinition。2.RootBeanDefinition: 无Parent的BeanDefinition或者合并后BeanDefinition。3.AnnotatedBeanDefinition: 注解标注的BeanDefinition。Sping Bean属性元信息Bean属性元信息-PropertyValues,这个就是影响bean属性的原创 2021-10-10 22:20:08 · 160 阅读 · 0 评论 -
Spring(八)--Spring资源管理
Java标准资源管理Java URL协议扩展目前java内建的URL协议有ftp,file,http等有时候我们需要扩展协议,可以通过下面两种方法进行扩展基于java.net.URLStreamHandlerFactory基于java.net.URLStreamHandler: 比如我们要实现一个x协议,解析 x:///META-INF/default.properties 文件,则在创建一个类名为Handler的类,放在 sun.net.www.protocol.${protoco原创 2021-10-10 22:15:01 · 196 阅读 · 0 评论 -
Spring(六)--SpringBean生命周期
Spring Bean元信息配置阶段BeanDefinition配置: 面向资源: XML配置,Properties资源配置。面向注解;面向APISpringBean元信息解析阶段面向资源BeanDefinition解析: 1.BeanDefinitionReader。2.XML解析器 BeanDefinitionParser。面向注解BeanDefinition解析: 1.AnnotatedBeanDefinitionReaderSpring Bean注册阶段BeanDefiniti原创 2021-10-10 22:12:24 · 161 阅读 · 0 评论 -
Spring(五)--SpringBean作用域
singleton默认SpringBean作用域,单例,即一个BeanFactory有且仅有一个实例prototype每次都新建对象,Spring容器没有办法管理prototype Bean的完整生命周期,也没有办法记录示例的存在,销毁回调方法将不会执行,可以利用其他方式进行清理工作。request作用域sessionBean作用域applicationBean作用域自定义Bean作用域实现Scope: org.springframework.beans.factory.config.Sc原创 2021-10-10 22:11:34 · 119 阅读 · 0 评论 -
Spring(四)--SpringIOC依赖来源
依赖查找来源依赖查找来源分为两类,一类通过SpringBeanDefinition生成的bean,一类是单例对象。除了用户定义,Spring内建了一些beandefinition和单例对象Spring内建的BeanDefinition在AnnotationConfigUtils类注册了一下BeanDefinitionSpring内建单例对象AbstractApplicationContext类里registerSingleton了一下bean依赖注入的来源依赖注入多了一个非S原创 2021-10-10 22:05:01 · 163 阅读 · 0 评论 -
Spring(三)--SpringIOC的依赖查找
Spring依赖查找的根源在JavaBeans里有依赖查找,BeanContext。在JNDI也有依赖查找,Context类。SpringIOC单一类型依赖查找接口根据Bean名称查找: getBean(String)根据Bean类型查找: 1. 实时查找(getBean(Class))。2.Spring 5.1 Bean延迟查找,getBeanProvider(Class)。ObjectProvider是Spring提供的一种宽松注入方式,解决了强制依赖以及同类型多个bean的问题。S原创 2021-10-10 22:01:07 · 196 阅读 · 0 评论 -
Spring(二)--SpringBean基础
定义SpringBeanBeanDefinitionBeanDefinition元信息BeanDefinition构建1.BeanDefinitionBuilder类2.AbstractBeanDefinition及派生类// 1.通过 BeanDefinitionBuilder 构建BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.cla原创 2021-10-10 21:58:45 · 65 阅读 · 0 评论 -
Spring(一)--SpringBeanIOC的依赖注入
依赖注入的模式与类型手动模式: 1.XML,Java注解配置元信息,API配置元信息自动模式: Autowring,即不需要任何配置就能自动注入(根据名字或类型等)为什么自动模式不被推荐根据名称来自动注入,一旦变量名改了,就无法生效。对于基本类型,比如int,String等,也无法使用自动绑定Setter方法依赖注入XML资源配置元信息,其实是setter注入Java注解配置元信息API配置元信息:BeanDefinitionBuilder definitionBuilde原创 2021-10-10 21:57:12 · 164 阅读 · 0 评论 -
Spring浅析
Spring浅析Spring容器初始化的过程public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // 主要是做些准备工作,比如对系统属性及环境变量的初始化及验证 // 其中有个initPropertySources给子类覆盖 // 于是你可以自定义个变量逻辑原创 2020-12-27 15:45:00 · 84 阅读 · 0 评论 -
SpringBoot的@SpringBootApplication分析
SpringBoot的@SpringBootApplication分析@SpringBootApplication总览上一篇,我们有提到run()方法调用了prepareContext()方法,而preparenContext就是会将run方法的primarySource即(run方法传的类,标注了SpringBootApplication的类)放到spring的BeanDefinition中,后续refresh的时候,springboot就会将该类实例化并放到spring容器中。这里以我自己写的E原创 2020-12-20 22:31:24 · 114 阅读 · 0 评论 -
SpringBoot启动过程分析
SpringBoot启动过程分析注意:本文分析的是SpringBoot的启动流程,关于自动装配,如何加载application.yml配置等内容在之后的文章分析。SpringBoot是基于Spring开发的,所以分析SpringBoot启动过程,就是在分析SpringBoot如何创建一个Spring容器的,以及在创建过程中有哪些可供开发者个性化开发使用的钩子。(文末有总结)SpringApplication.run()方法究竟是如何启动SpringBoot项目的?可以看到,主要分为两部分,一部分是n原创 2020-12-20 16:51:22 · 265 阅读 · 1 评论 -
Hystrix基础
什么是Hystrix?在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败雪崩,这个就是Hystrix需要做的事情。hystrix功能隔离(线程池隔离和信号量隔离):限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。优雅的降级机制:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降...原创 2020-04-18 15:13:58 · 148 阅读 · 0 评论 -
Spring Boot(一)
一、 Spring Boot(一)SpringBoot简介简化Spring应用开发的框架整个Spring技术栈的一个大整合J2EE开发的一站式解决方案Hello World探究pom.xml<groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependen...原创 2020-01-30 15:46:23 · 233 阅读 · 0 评论 -
微服务(一):为什么需要微服务
微服务(一):为什么需要微服务微服务出现的原因单体架构存在不足业务越来越复杂,单体应用的代码量越来越大,代码的可读性、可维护性、可拓展性下降,新人接手代码所需的时间成倍增加,业务扩展带来的代价极大。单体应用的并发能力有限。隔离性差,某部分出现问题时,整个工程都需要重新发布,故障影响范围大服务化出现为了解决,单体应用的问题,选择将应用进行切分。相继出现了SOA及微服务,下面...原创 2020-01-19 00:02:05 · 408 阅读 · 0 评论