Spring Core
安迪源文
小步快走
展开
-
非Spring环境单独引入AnnotationConfigApplicationContext注解方式使用组件
package com.paas.app.hello;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.ComponentScan;// @Configuration // 这种模式下该注解已经没有必要使用@ComponentScan(value = "com.paas.app.hello")原创 2021-04-03 08:53:14 · 1023 阅读 · 0 评论 -
Spring Context : EventListenerMethodProcessor
1. 概述EventListenerMethodProcessor 是 Spring 事件机制中非常重要的一个组件。它管理了一组EventListenerFactory组件,用来将应用中每个使用@EventListener注解定义的事件监听方法变成一个ApplicationListener实例注册到容器。换句话讲,框架开发者,或者应用开发者使用注解@EventListener定义的事件处理方法,如果没有EventListenerMethodProcessor的发现和注册,是不会被容器看到和使用的。Ev原创 2020-05-16 20:49:05 · 1419 阅读 · 0 评论 -
通过@ConfigurationProperties使用外部配置填充Bean属性的几种方法
概述Spring boot 应用中,当使用注解方式定义一个Bean时,同时可以利用@ConfigurationProperties导入外部属性填充到这个Bean的实例。本文通过例子介绍了几种用法可以达到这种效果 :方式1 : @ConfigurationProperties + @Component 注解到bean定义类上 方式2 : @ConfigurationProperties + @Be原创 2017-12-09 23:28:04 · 15969 阅读 · 4 评论 -
Spring 单例bean循环依赖的解决
Spring bean循环依赖例子Bean组件A : 依赖于Bean组件B@Componentpublic class BeanA { BeanB b; @Autowired public void setB(BeanB b) { this.b = b; } public String describeB() { r...原创 2019-02-13 14:56:48 · 1130 阅读 · 2 评论 -
Spring 概念模型 -- 单例bean注册表缺省实现 DefaultSingletonBeanRegistry
概述DefaultSingletonBeanRegistry是Spring各种bean容器的基类。是Spring单例bean注册表的抽象建模接口SingletonBeanRegistry的缺省实现。具体来讲DefaultSingletonBeanRegistry具备以下功能 :SingletonBeanRegistry接口约定的单例bean注册表功能;继承自SimpleAliasRegi...原创 2019-02-13 11:53:27 · 804 阅读 · 0 评论 -
Spring 概念模型 -- SingletonBeanRegistry 单例bean对象注册表
概述Spring容器对单例bean实例的登记管理主要通过接口SingletonBeanRegistry建模抽象,我们可以称之为"单例bean实例注册表"。该接口约定了实现者(一般指容器)具有如下能力 :注册登记将创建完成的单例bean实例;获取某个指定名称的单例bean实例;检测是否已经注册登记了某个指定名称的单例bean实例;获取所有单例bean实例的名称;获取注册登记的所有单例b...原创 2019-02-10 11:08:00 · 598 阅读 · 0 评论 -
Spring 概念模型 -- AliasRegistry 别名注册表
概述顾名思义,AliasRegistry “别名注册表"是管理"别名"的"注册表”。Spring使用此概念抽象容器对bean别名的管理功能。此抽象对应的接口是AliasRegistry,定义在包org.springframework.core中。此接口是org.springframework.beans.factory.support.BeanDefinitionRegi原创 2019-02-09 19:02:37 · 569 阅读 · 0 评论 -
Spring 概念模型接口 ImportBeanDefinitionRegistrar: Bean定义导入器
概述在Spring中,配置类(使用@Configuration的那些类)可以使用@Import直接导入另外一个配置类,也可以导入一个ImportSelector实现类根据特定的选择条件导入符合条件的配置类,也可以实现该接口ImportBeanDefinitionRegistrar根据特定条件程序化地直接注册bean定义到容器。一个ImportBeanDefinitionRegistrar实现类...原创 2019-02-15 17:14:42 · 1187 阅读 · 1 评论 -
基于Java配置的Spring应用中如何导入更多的bean定义配置
在基于Java配置的Spring应用中,如何导入更多的bean定义配置呢 ? 一般有以下两种方式 :@Import可以用于导入如下几种类型的bean定义配置 :@configuration注解的配置类ImportSelector实现类,依据一定的选择条件决定导入哪些配置类ImportBeanDefinitionRegistrar实现类,程序方式直接注册bean定义到容器@Imp...原创 2019-02-15 16:18:34 · 651 阅读 · 0 评论 -
Spring 概念模型接口 ImportSelector : 配置类导入选择器
概述在Spring中,如果想基于一个给定的选择标准(selection criteria),比如一个或者多个注解属性导入一些配置类(使用@Configuration的那些类)。可以实现接口ImportSelector来实现这样的逻辑。一个ImportSelector实现类通常也可能会实现各种Aware接口,如果实现了这些Aware接口,这些接口方法的调用会发生在selectImports之前。...原创 2019-02-15 15:55:19 · 1253 阅读 · 0 评论 -
Spring 概念模型
概念模型Bean – 框架留给开发人员实现应用业务的概念可以是任何POJO类。一般指运行时的某个业务对象。一般来讲,一个被Spring容器管理的业务对象通常都是,而且一个Bean一般都来自某个Bean定义。BeanDefinition – Bean定义开发人员或者框架自身对Bean的定义的抽象建模,框架基于此定义和其他配置信息,比如AOP配置,生成最终运行时使用的Bean实例。Bean定义...原创 2019-01-29 18:38:00 · 379 阅读 · 0 评论 -
Spring 工具类 PropertyResourceConfigurer(抽象基类)
概述Spring PropertyResourceConfigurer是一个抽象基类,继承自PropertiesLoaderSupport,并实现了接口BeanFactoryPostProcessor。它抽象了容器启动时,BeanFactory后置处理阶段对容器中所有bean定义中的属性进行配置的一般逻辑,属性配置所使用的属性来源是基类PropertiesLoaderSupport方法所规定的那...原创 2019-02-03 10:59:43 · 2529 阅读 · 0 评论 -
Spring 一般工具建模
本文列出Spring的对一些一般工具的抽象建模,它们可能是接口,也可能是类。这里所谓"工具",一般是是指它能对某个名词实体做某种动词性操作,比如"属性解析器",表示这是一个"工具",它能对"属性"进行"解析"。所谓"一般"工具,指的是该工具在Spring框架层面都适用,而不是仅应用在某个原创 2019-02-02 16:24:29 · 497 阅读 · 0 评论 -
Spring BeanPostProcessor : ConfigurationPropertiesBindingPostProcessor
概述ConfigurationPropertiesBindingPostProcessor是一个BeanPostProcessor,它通常被框架添加到容器,用于解析bean组件上的注解@ConfigurationProperties,将属性源中的属性设置到bean组件。源代码解析1 被引入到容器在不同的应用中,ConfigurationPropertiesBindingPostProces...原创 2019-03-06 15:01:30 · 4779 阅读 · 2 评论 -
Spring bean 依赖注入情况总结
在Spring中,一个bean对外部的依赖主要有以下几种情况 :编号依赖形式简介依赖注入过程的要点1构造函数参数构造函数参数即使不使用任何注解也会被作为bean依赖处理AbstractAutowireCapableBeanFactory#autowireConstructor2使用@Autowired注解的成员函数的参数用于注入其他bean,一般常见的基于...原创 2019-03-09 17:29:17 · 331 阅读 · 0 评论 -
Spring bean 成员属性/成员方法参数依赖注入分析
概述对于一个bean中成员属性方式的依赖和成员方法参数方式的依赖,会在这个bean创建过程中属性填充阶段对这些依赖进行依赖注入。具体的将,这两种形式的依赖如下例子所示 :@Componentclass BeanA {}@Componentclass BeanB {}@Componentpublic class DemoBean { // 成员属性依赖 @...原创 2019-03-24 22:24:08 · 1101 阅读 · 0 评论 -
Spring 工作原理分析 : 注解@Autowired
容器启动时实例化Spring BeanPostProcessor : AutowiredAnnotationBeanPostProcessor;AutowiredAnnotationBeanPostProcessor在容器实例化每个bean时扫描bean中使用注解@Autowired/@Value/@Inject的位置,执行相应的依赖注入;以上步骤关键点在于AutowiredAnnotat...原创 2019-08-30 14:21:31 · 505 阅读 · 0 评论 -
Spring Context : ClassPathScanningCandidateComponentProvider
概述功能作用在某一个指定的包内,使用指定的包含过滤器和排斥过滤器扫描匹配的bean组件定义。主要功能函数addIncludeFilter – 添加一个包含过滤器addExcludeFilter – 添加一个排除过滤器findCandidateComponents – 核心任务 : 从指定的某个包内扫描目标bean组件定义resetFilters – 设置包含过滤器和排除过滤...原创 2019-08-24 10:26:40 · 1170 阅读 · 0 评论 -
Spring : AsyncAnnotationAdvisor
概述这是一个Advisor,用于激活使用了异步方法调用,所基于的信息是这些方法或者这些方法所在实现类/接口上所使用异步注解。至于是哪些异步注解,可以通过AsyncAnnotationAdvisor来指定,如果不指定,缺省是指Spring @Async或者EJB 3.1 javax.ejb.Asynchronous。通过AsyncAnnotationAdvisor可以指定异步方法调用的任务执行器...原创 2019-07-20 22:57:21 · 502 阅读 · 0 评论 -
AbstractAdvisingBeanPostProcessor 和 APC 的异同
共同点都是BeanPostProcessor都有可能将某个bean包装成一个代理对象,增加一些拦截器功能不同点APC (AutoProxyCreator)在整个容器的范围查找所有的匹配当前bean的拦截器,包装成Spring Advisors为当前bean创建代理对象AbstractAdvisingBeanPostProcessor自身内置一个 Advisor,...原创 2019-07-20 18:03:04 · 954 阅读 · 0 评论 -
Spring : @EnableScheduling 的工作原理
开发人员使用注解 @EnableScheduling;注解@EnableScheduling导入SchedulingConfiguration;SchedulingConfiguration定义基础设施bean ScheduledAnnotationBeanPostProcessor scheduledAnnotationProcessor;ScheduledAnnotationBeanP...原创 2019-07-20 18:01:09 · 2500 阅读 · 0 评论 -
Spring : AsyncAnnotationBeanPostProcessor
概述AsyncAnnotationBeanPostProcessor是一个AbstractBeanFactoryAwareAdvisingPostProcessor/BeanPostProcessor,它在容器启动时被使用,检测每个bean是否符合在类级别或者方法级别使用异步注解,如果使用了,则会使用一个AsyncAnnotationAdvisor包裹该bean,从而该bean上通过异步注解所定...原创 2019-07-20 18:00:30 · 1525 阅读 · 0 评论 -
Spring 概念模型 : PathMatcher 路径匹配器
概述PathMatcher是Spring的一个概念模型接口,该接口抽象建模了概念"路径匹配器",一个"路径匹配器"是一个用于路径匹配的工具。它的使用者是 :org.springframework.core.io.support.PathMatchingResourcePatternResolverorg.springframework.web.servlet.handler.Abstrac...原创 2019-03-29 09:32:02 · 19705 阅读 · 1 评论 -
Spring 小功能 : 读取yml属性配置文件
假设我们在classpath上有一个yml属性配置文件application.yml,我们想将它程序化读取到Properties对象,可以使用YamlPropertiesFactoryBean,如下所示 :YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();yaml.setResources(new ClassPat...原创 2019-03-28 16:36:35 · 2853 阅读 · 0 评论 -
Spring 知识点 : 简单属性/值类型
在Spring世界里,有些类型会被认为是简单类型,相应地,有些属性会被认为是简单属性。那么到底哪些类型或者属性会被Spring认为是简单的呢 ?这些概念在BeanUtils工具类中有所定义 :1. 什么是简单值类型 ? /** * Check if the given type represents a "simple" value type: * a primitive, an en...原创 2019-03-24 11:42:31 · 1022 阅读 · 0 评论 -
Spring bean 构造函数参数依赖注入分析
1. 构造函数参数依赖的例子@Componentpublic class BeanA { // 省略实现 // ... }@Componentpublic class BeanB { BeanA a; // 注意,这里可以不使用 @AutoWired 等注解就会导致Spring的依赖注入 public BeanB(BeanA a) {...原创 2019-03-23 14:48:00 · 5461 阅读 · 0 评论 -
Spring 依赖解决过程分析
概述依赖注入是Spring框架的基本能力。而完成一次依赖注入,概念上又可以分为两步:找到依赖注入依赖在这两个步骤中,找到依赖是相对复杂的一个步骤,而一旦找到依赖,注入依赖只是一个简单的设置动作。本文我们就结合源代码分析一下Spring是如何找到依赖的,也就我们所说的依赖解决的过程。源代码分析1. 框架对依赖解决的定义具体来讲,Spring框架首先对依赖注入有接口层面的定义,如下所...原创 2019-03-22 22:22:43 · 965 阅读 · 0 评论 -
Spring 工具:PropertySourcesPropertyResolver 从PropertySources中解析属性
概述Spring框架将某个属性源抽象成了类PropertySource,又将多个属性源PropertySource抽象为接口PropertySources。对某个PropertySource对象中属性的解析,抽象成了接口PropertyResolver,而类PropertySourcesPropertyResolver则是Spring用于解析一个PropertySources对象中属性的工具类。...原创 2018-11-24 20:33:03 · 3170 阅读 · 0 评论 -
Spring 工具建模:PropertyResolver 属性解析工具基本功能建模
概述Spring 使用接口PropertyResolver抽象了从底层来源获取属性的基本功能,和解析${...}这样的占位符的功能。至于底层属性源具体是什么,如何抽象,是一个属性源还是聚合了多个属性源,这些都由实现子类在实现层面考虑。该接口位于org.springframework.core.env。源码解析该接口定义的功能如下 :boolean containsProperty...原创 2019-02-02 15:27:29 · 970 阅读 · 0 评论 -
Spring 注解 @ConfigurationProperties 工作原理
概述BeanPostProcessor ConfigurationPropertiesBindingPostProcessor的作用是绑定PropertySources到@ConfigurationProperties注解的bean实例。这是一个框架内部工具,在实例化每一个bean时,框架会使用它将@ConfigurationProperties注解中指定前缀的外部配置属性项加载进来设置到bea...原创 2019-01-12 12:39:46 · 3564 阅读 · 0 评论 -
PostProcessorRegistrationDelegate
工具类,AbstractApplicationContext的post-processor处理都被委托给该类来完成。这里的 post-processor 包括两类 : BeanFactoryPostProcessorBeanPostProcessor该类位于包 package org.springframework.context.support原创 2017-11-14 14:22:09 · 6511 阅读 · 2 评论 -
Spring各种PostProcessor : BeanFactoryPostProcessor
概述顾名思义,BeanFactoryPostProcessor定义了关于 BeanFactory 的PostProcessor。这里的BeanFactory其实就是一般常说的Spring bean 容器,通常是一个DefaultListableBeanFactory,它实现了BeanDefinitionRegistry接口用于作为bean定义注册表,同时也实现了接口ConfigurableLis...原创 2019-01-11 21:14:16 · 1197 阅读 · 1 评论 -
Spring各种PostProcessor : BeanPostProcessor
概述顾名思义, BeanPostProcessor定义了关于Bean的PostProcessor。这里的Bean就是我们一般意义上所说的bean容器中的bean实例了。Spring容器在每个bean实例创建过程中bean实例初始化前后调用接口BeanPostProcessor定义的方法。BeanPostProcessor接口定义了两个方法:Object postProcessBefore...原创 2019-01-11 21:12:52 · 943 阅读 · 0 评论 -
Spring的各种PostProcessor
简介 : Spring 的几种 PostProcessorSpring 有如下几种PostProcessor : 1. BeanDefinitionRegistryPostProcessor 2. BeanFactoryPostProcessor 3. BeanPostProcessorBeanDefinitionRegistryPostProcessorBeanDefini原创 2017-11-21 18:31:39 · 4885 阅读 · 0 评论 -
Spring BeanPostProcessor : ApplicationContextAwareProcessor
概述ApplicationContextAwareProcessor是一个Spring内部工具,它实现了接口BeanPostProcessor,用于向实现了如下某种Aware接口的bean设置ApplicationContext中相应的属性:EnvironmentAwareEmbeddedValueResolverAwareResourceLoaderAwareApplicationE...原创 2019-01-11 09:54:06 · 2882 阅读 · 0 评论 -
Spring资源加载器抽象和缺省实现 -- ResourceLoader + DefaultResourceLoader
概述对于每一个底层资源,比如文件系统中的一个文件,classpath上的一个文件,或者一个以URL形式表示的网络资源,Spring 统一使用 Resource 接口进行了建模抽象,相应地,对于这些资源的加载,Spring使用了 ResourceLoader 进行了统一建模抽象。通过ResourceLoader,给定其可以接受的资源路径,我们可以获得对应资源的Resource对象,然后进行进行相...原创 2018-12-31 18:13:50 · 789 阅读 · 1 评论 -
Spring的bean定义 2 : 通用bean定义逻辑 -- AbstractBeanDefinition
概述AbstractBeanDefinition是最终全功能BeanDefinition实现类的基类,也就是这些类的共同属性和公用逻辑实现。AbstractBeanDefinition中并没有太复杂的实现逻辑,而是主要是用于:定义共用的构造函数。定义共用BeanDefinition属性以及提供它们的getter/setter方法。其他一些共用工具方法 : 从另外一个bean定义覆盖当前...原创 2018-12-30 21:50:45 · 2466 阅读 · 0 评论 -
Spring的bean定义 1 : 基础建模--接口BeanDefinition
简介对于基于Spring框架开发的一个应用系统,其中每一个bean都来自于一个bean定义:开发人员的某个bean定义,框架自身的某个bean定义,三方库的某个bean定义。这些概念上的bean定义,通过Spring接口BeanDefinition被建模,并且在应用运行时都会以一个BeanDefinition对象的形式被注册到Spring IoC容器中。所以说,bean定义,或者说,BeanDe...原创 2018-12-30 12:56:00 · 1819 阅读 · 0 评论 -
Spring的bean定义 3 : BeanDefinition实现类例子演示
演示源码辅助演示使用的bean类package tut.zero;import lombok.Data;@Datapublic class Pet { String type; String name;}演示BeanDefinition各个实现类例如何被使用package tut.zero;import lombok.extern.slf4j.Slf4j...原创 2018-12-31 00:13:31 · 1405 阅读 · 0 评论 -
Spring 元数据有关的概念模型
模型类型简介ClassMetadata接口某个类的元数据建模,不需要对应的类被加载AnnotatedTypeMetadata接口定义对某个类型的注解信息的访问,不需要对应的类被加载AnnotationMetadata接口某个类的注解元数据建模,不需要对应的类被加载,继承自ClassMetadata和AnnotatedTypeMetadataMet...原创 2019-01-03 17:29:31 · 936 阅读 · 0 评论