spring5学习
代码地址: https://github.com/behappy-spring-study/spring5_study_source 容器与 bean1) 容器接口 BeanFactory 接口,典型功能有: getBean ApplicationContext 接口,是 BeanFactory 的子接口。它扩展了 BeanFactory 接口的功能,如: 国际化 通配符方式获取一组 Resource 资源 整合 Environment 环境(能通过它获取各种来源的配置信息) 事件发布与监听,实现组件之间的解耦 可以看到,我们课上讲的,都是 BeanFactory 提供的基本功能,ApplicationContext 中的扩展功能都没有用到。 演示1 - BeanFactory 与 ApplicationContext 的区别代码参考com.itheima.a01 包 收获💡通过这个示例结合 debug 查看 ApplicationContext 对象的内部结构,学到: 到底什么是 BeanFactory 它是 ApplicationContext...
springboot2学习笔记
转自: https://blog.csdn.net/u011863024/article/details/113667634#01SpringBoot2_18 https://blog.csdn.net/u011863024/article/details/113667946 代码地址: https://gitee.com/xiaowu_wang/springboot2 01、基础入门-SpringBoot2课程介绍 Spring Boot 2核心技术 Spring Boot 2响应式编程 学习要求-熟悉Spring基础-熟悉Maven使用 环境要求 Java8及以上 Maven 3.3及以上 学习资料 Spring Boot官网 Spring...
SpringBoot项目启动时初始化操作的6种方式
SpringBoot项目启动时初始化操作的6种方式1、监听容器刷新完成扩展点ApplicationListener<ContextRefreshedEvent>ApplicationContext事件机制是观察者设计模式实现的,通过ApplicationEvent和ApplicationListener这两个接口实现ApplicationContext的事件机制。 Spring中一些内置的事件如下: ContextRefreshedEvent:ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext接口中使用 refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用。 ContextStartedEvent:当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的...
Spring-native/GraalVM
初识spring native官方介绍 Spring Native提供了使用GraalVM 本机图像编译器将Spring应用程序编译为本机可执行文件的支持。与Java虚拟机相比,本机映像可以为许多类型的工作负载提供更便宜,更可持续的托管。这些包括微服务,功能工作负载,非常适合容器和Kubernetes使用本机映像具有关键优势,例如即时启动,即时峰值性能和减少的内存消耗。GraalVM本机项目希望随着时间的推移会改善一些缺点和折衷方案。构建本机映像是一个繁重的过程,比常规应用程序要慢。预热后,本机映像具有较少的运行时优化。最后,它比具有某些不同行为的JVM还不成熟。常规JVM和此本机映像平台之间的主要区别是: - 在构建时将未使用的零件删除。 - 反射,资源和动态代理需要配置。 - 类路径在构建时是固定的。 - 没有类延迟加载:可执行文件中附带的所有内容都将在启动时加载到内存中。 - 一些代码将在构建时运行。 -...
探究spring的底层实现原理2
接上一篇[探究spring的底层实现原理1上一篇从理论到源码讲到了以下四点 BeanFactory Bean的整个生命周期 Bean的属性填充 依赖注入 这节就切合上一篇,手写一个简易版spring的小demo,看看我是怎样去实现的java <谨供参考> 应用程序上下文(启动类)123ClassPathXmlApplicationContext:xml配置文件方式AH8q3dGK2f2vLZVgbRfLTjQPySe2yRaJHs:注解方式SpringApplication:SpringBoot方式 模拟注解方式启动 配置类,指定"spring"需要扫描的限定包路径 123@ComponentScan("org.xiaowu.xiaowu.spring.xiaowu")public class AppConfig...
探究spring的底层实现原理1
探究spring的底层实现原理1<谨供参考> 这篇文章我将尝试从以下几个方面配合源码讲解spring的原理,并在下一个篇章手写一个简易版spring的小demo来更透彻的分析spring项目是如何"动"起来的 BeanFactory Bean的整个生命周期 Bean的属性填充 依赖注入 先来看一张图(看不清可以右键打开) 这里需要说的一点是,spring的核心就是AbstractApplicationContext.refresh中的13个方法,关于refresh我会单独写BeanFactory12345678910以springboot项目为例,运行主入口类的SpringApplication.run会走到AbstractApplicationContext.refresh方法,从ConfigurableListableBeanFactory beanFactory =...
记一次因在spring中动态注入自定义bean报出的异常
在dubbo系列中我写了一篇探究Dubbo服务注册发现的原理,为了在spring中动态注入payservice接口,我利用了BeanDefinitionRegistryPostProcessor接口,中间利用factorybean来实现了一个自定义bean的创建过程. 但是待我运行之后报了这样的错误Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameter, 不得以跟着refresh方法debug,一点点端详,查出了猫腻... 下面是整个代码链路跟踪图,看看这个PayService自定义接口是怎么一步一步注入到spring中的 refresh : 这就不说了,spring的核心方法都在这里 finishBeanFactoryInitialization : 完成此上下文的bean工厂的初始化,初始化所有剩余的单例bean preInstantiateSingletons :...