![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
文章平均质量分 68
spring相关内容学习分享
一户董
专注后端技术分享!!!
展开
-
spring系列文章
spring注入对象的几种方式 。原创 2023-02-18 22:02:44 · 79 阅读 · 0 评论 -
spring之ignoreDependencyInterface和ignoreDependencyType用法分析
1:ignoreDependencyInterface方法签名:org.springframework.beans.factory.config.ConfigurableListableBeanFactory#ignoreDependencyInterfacevoid ignoreDependencyInterface(Class<?> ifc);方法作用:如果是某个spring bean是Class<?> ifc的子类,则该spring bean的所有的属性将不会被自原创 2021-06-04 17:20:21 · 487 阅读 · 1 评论 -
spring之ImportSelector和DeferredImportSelector注解分析
写在前面本文基于springboot来进行测试,对springboot不了解或者是想要直接获取测试代码的朋友,可以参考这篇文章。1:源码分析1.1:入口分析当我们执行main方法,调用run函数,是如何最终解析到这里的,最终会执行到代码org.springframework.context.annotation.ConfigurationClassParser#parse(java.util.Set<org.springframework.beans.factory.config.BeanDe原创 2021-05-20 11:30:14 · 508 阅读 · 1 评论 -
Spring注解之@ImportResource和@PropertySource分析
1:写在前面之前我们使用spring,最多的还是通过xml配置文件的方式来配置spring bean等内容,随着注解的广泛和spring4中Java config的引入,xml配置文件方式逐步被替换,但是如果是想要使用xml配置文件方式的话,也可以通过@ImportResource注解来实现,下面我们来一起看下如何使用。2:ImportResource...原创 2021-05-19 17:17:02 · 390 阅读 · 1 评论 -
spring之ComponentScan注解分析
1:源码分析源码如下:2:基础类准备2.1:包pack1package yudaosourcecode.componentscantest.pack1;import org.springframework.stereotype.Component;@Componentpublic class Component1 {}package yudaosourcecode.componentscantest.pack1;import org.springframework.stere原创 2021-05-16 19:50:59 · 281 阅读 · 0 评论 -
spring之SpEL分析
1:写在前面spring在spring3版本后提供了el表达是的功能,可以方便的访问配置的信息,表达式的计算,对象的访问等。对应的顶层接口是org.springframework.expression.ExpressionParser。2:字符串常量表达式2.1:测试代码public static void stringContantExp() { // 定义表达式解析器对象 ExpressionParser expressionParser = new SpelExpression原创 2021-05-06 14:43:18 · 345 阅读 · 0 评论 -
spring之refresh方法分析
spring之refresh方法分析原创 2021-05-05 15:18:57 · 1186 阅读 · 0 评论 -
spring之ApplicationContext分析
1:类图从类图中可以看出来主要的父接口以及提供的能力如下:BeanFacotry:比较基础和简单的bean容器,主要通过getBean(xxx)的API提供了获取bean的操作,通过isPrototy,isSingleton等方法判断是原型bean,还是单例bean,通过containerBean(xxx)判断是否包含某bean的能力。HierarchicalBeanFactory:这是类名作用BeanFactory比较基础和简单的bean容器,主要通过getBean(xx原创 2021-05-02 09:16:21 · 355 阅读 · 2 评论 -
spring之环境和属性分析
1:PropertySource接口全限定名称为org.springframework.core.env.PropertySource,该接口用于封装数据源,提供基于key-v的数据的获取,源码如下:// 泛型T代表数据源类型,可以是java.util.Properties,也可以是java.util.HashMap,也可以是ServletContext,ServletConfig等public abstract class PropertySource<T> { protected原创 2021-04-28 14:32:19 · 555 阅读 · 0 评论 -
spring之BeanDefinitionRegistry分析
1:写在前面我们定义bean时不管是通过java config方式,还是xml配置文件的方式,最终都会解析成BeanDefinition,而这些BeanDefinition都需要注册到容器中,这个注册的工作是通过接口org.springframework.beans.factory.support.BeanDefinitionRegistry来完成的,该接口也正是我们本文要分析的API,先来看下类图:其中顶层接口是AliasRegistry,用于bean别名的管理,我们就从这个接口的分析开始。2:A原创 2021-04-27 17:50:17 · 1255 阅读 · 0 评论 -
spring之InstantiationStrategy分析
1:回顾在这篇文章中我分析了spring bean的生命周期,为了方便本文的讲解,再来贴下生命周期的流程图:第一步的创建bean实例原创 2021-04-24 17:50:35 · 890 阅读 · 0 评论 -
spring之BeanWrapper分析
1:spring bean生命周期分析在这篇文章中我分析了spring bean的生命周期,为了方便本文的讲解,再来贴下生命周期的流程图:我们看到图中有一步创建bean实例,对应的方法是createBeanInstance,调用位置源码如下:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBeanprotected Object doCreateBean(final Strin原创 2021-04-21 20:19:50 · 1762 阅读 · 0 评论 -
spring填充属性类型装换过程分析
1:写在前面在这篇文章中我们分析了spring通过populateBean方法进行属性填充的过程,而对于数据类型具体是如何转换的并没有详细分析,本文就来分析配置文件中的配置的String信到底是如何转换为目标bean的具体类型的。2:convertForProperty首先我们看populateBean方法,相关源码:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBeanpr原创 2021-04-12 18:18:16 · 260 阅读 · 0 评论 -
spring PropertyOverrideConfigurer分析,带实例,带源码分析
顶顶顶顶原创 2021-04-08 18:08:40 · 175 阅读 · 0 评论 -
spring之使用PropertyPlaceholderConfiguer实现多环境切换案例
1:写在前面在工程上,不同的环境配置配置信息一般都是不一样的,之前常见的做法是,人工干预,在每个环境都手动修改,放到外部文件中,这两种方式都有一个缺点,那就是容易出错,特别是第一种人工干预修改的方式,因此目前解决这个问题,是通过每个环境定义一个配置文件的方式,然后通过环境变量来控制启用哪个配置文件,本文我们就来通过ProperyPlaceholderConfigurer来实现这个功能。另外,对于源码感兴趣的朋友可以参考这里。...原创 2021-04-08 10:05:56 · 416 阅读 · 0 评论 -
spring之通过PropertyPlaceholderHelper替换占位符
1:替换单个key1.1:测试代码@Testpublic void testReplaceSinglePlaceholder() { PropertyPlaceholderHelper helper = new PropertyPlaceholderHelper("${", "}"); String text = "foo=${foo}"; System.out.println("替换前的值是:" + text); Properties props = new Prop原创 2021-04-07 16:55:02 · 1311 阅读 · 1 评论 -
spring PropertyPlaceholderConfigurer源码分析
写在前面关于PropertyPlaceholderConfigurer的使用例子,可以参考这里。原创 2021-04-07 13:09:54 · 338 阅读 · 2 评论 -
spring PropertyPlaceholderConfigurer分析,带实例
1:写在前面该类的作用是替换配置文件中配置的占位符信息为配置文件中实际的值,原理是PropertyPlaceholderConfigurer实现了BeanFactoryPostProcessor接口,利用其在创建bean前能够修改BeanDefinition的特点,来替换修改占位符为配置文件中的实际值。2:例子2.1:定义beanpublic class MyPropertyPlaceholderConfigurerBean { private String name; privat原创 2021-04-05 16:12:13 · 271 阅读 · 0 评论 -
spring BeanFactoryPostProcessor分析,带实例
1:分析该接口是spring提供给我们的另一个扩展点,用于在解析配置信息为BeanDefinition之后在生成bean之前,加入一个允许我们修改BeanDefinition的点,接口定义如下:// 是只有一个方法的函数接口@FunctionalInterfacepublic interface BeanFactoryPostProcessor { // 我们可以通过该方法来修改beandefinition,从而达到修改最终bean的效果 void postProcessBeanFactory(原创 2021-04-05 12:00:13 · 359 阅读 · 0 评论 -
spring bean生命周期分析,带实例
1:写在前面本文只涉及流程图和具体实例,不涉及源码级别分析,对源码感兴趣的朋友可以移步这里。2:流程图3:实例3.1:代码public class MyLifeCycleBean implements BeanNameAware, BeanFactoryAware, BeanClassLoaderAware, BeanPostProcessor, InitializingBean, DisposableBean {原创 2021-04-04 16:12:31 · 188 阅读 · 0 评论 -
spring之Aware接口详细分析
1:接口接口为org.springframework.beans.factory.Aware,源码如下:org.springframework.beans.factory.Awarepublic interface Aware {}这是一个标记接口,表达的含义是当前bean具备了被告知某些信息的资格,但是具体告知什么,就是具体的子接口来定义了,比如org.springframework.beans.factory.BeanNameAware代表具备了被告知自己的名称的资格,此时需要来告知bean原创 2021-04-02 16:18:39 · 455 阅读 · 0 评论 -
使用流程图说明spring bean创建过程
1:写在前面本文只是使用流程图方式来说明spring bean创建的整个过程,想要了解源码如何实现的可以参考这里,文章内有大量的参考链接,以及关联依赖文章链接,各位耐着性子看。2:getBean原创 2021-04-01 17:24:36 · 292 阅读 · 0 评论 -
spring autowire在xml中的使用
1:说明spring为了方便我们完成bean注入相关的配置工作,提供了自动注入功能,我们只需要按照其规则来进行配置,就能够让spring注入我们需要的bean了。2:准备测试类2.1:Statepublic class State { private String stateName; ...snip...}2.2:Countrypublic class Country { // generate setters... private State state; // second原创 2021-03-27 21:34:18 · 637 阅读 · 1 评论 -
spring的ConversionService分析
1:说明这是spring用来进行数据类型转化定义的接口,功能同JDK的PropertyEditor简单使用,源码如下:org.springframework.core.convert.ConversionServicepublic interface ConversionService { // sourceType类型是否可以转换为targetType类型 boolean canConvert(@Nullable Class<?> sourceType, Class<?>原创 2021-03-21 11:41:22 · 413 阅读 · 0 评论 -
spring调用bean的初始化方法分析
1:写在前面本文在spring通过不同的方式创建bean的基础上进行分析,作为补充,详细分析spring调用初始化方法的过程。原创 2021-03-20 11:09:37 · 462 阅读 · 0 评论 -
处理BeanWrapper填充bean属性
1:写在前面本文在spring通过不同的方式创建bean的基础上进行分析,作为补充,详细分析spring是如何填充属性到bean中的。原创 2021-03-20 10:29:30 · 233 阅读 · 0 评论 -
spring关于单例模式循环依赖的处理
1:写在前面本文在spring通过不同的方式创建bean的基础上进行分析,作为补充,详细分析spring是如何解决单例模式下的循环依赖的。原创 2021-03-20 10:13:49 · 669 阅读 · 0 评论 -
spring通过不同的方式创建bean
1:写在前面本文在spring通过不同的方式创建bean的基础上进行分析,作为补充,详细分析spring通过构造函数,工厂方法等创建bean的过程。原创 2021-03-20 09:46:03 · 256 阅读 · 1 评论 -
createBean方法分析
ddd原创 2021-03-18 16:15:29 · 256 阅读 · 0 评论 -
spring创建bean的几种方式分析
1:配置文件主要是通过bean的方式,另外也可以通过自定义标签的方式来完成。2:注解通过@Component系的注解,如常用的@Controller,@Service,@Repository,@Configuration等。3:FactoryBean接口spring定义了该接口,允许,我们自定义bean的实例化的过程,具体参考spring的FactoryBean分析。4:factory-method这种方式通过我们自己定义类,然后自定义定义方法的方式来来创建bean,相比于3:Factory原创 2021-03-18 15:16:22 · 117 阅读 · 0 评论 -
spring的factory-method和factory-bean分析
1:原创 2021-03-18 15:15:37 · 1051 阅读 · 0 评论 -
spring循环依赖分析
1:写在前面这里的循环依赖指的是基于引用的依赖,而非depend-on或者是其他。当A引用B,B引用C,C又引用A就构成了循环引用,也就是我们平时所说的循环依赖了,这里也有不同的情况,bean为单例的,bean为原型的,基于属性构成的循环依赖,基于构造函数参数构成的循环依赖,我们来分别看下这些情况。2:单例基于属性的循环依赖2.1:定义3个类public class SingletonByPropertyA { private SingletonByPropertyB singletonBy原创 2021-03-15 19:12:31 · 171 阅读 · 0 评论 -
spring的BeanPostProcessor分析
1:作用在spring bean的生命周期中加入自定义逻辑。2:接口源码:public interface BeanPostProcessor { // 该方法在调用完毕构造方法,setter方法后,执行init-method方法前 // 执行,参数为当前状态下的bean,以及bean的名称 @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansEx原创 2021-03-14 19:57:25 · 323 阅读 · 0 评论 -
spring如何控制bean的初始化顺序
1:写在前面在工作中经常有这样的需求,希望某个spring bean初始化之前其他的某个spring bean已经完成初始化,我们可以称之为依赖,目前据我所知有两种方式完成这种需求,第一种就是,将被依赖的bean作为依赖bean的构造函数的参数,第二种方式就是通过spring提供的depend-on,下面我们分别来看下这两种方式。2:构造函数2.1:定义被依赖的类public class ByConstructorClsA {}2.2:定义依赖类注意在构造函数中使用2.1:定义被依赖的类中定原创 2021-03-12 10:30:28 · 1121 阅读 · 0 评论 -
修改spring bean状态的几种方式分析
1:自定义标签1.1:自定义bean子标签通过自定义bean子标签的方式可以在生成spring bean前,对当前的bean标签解析的BeanDefinition(一般是GenericBeanDefinition)进行装饰修改,从而达到干预bean的生成的目的,详细可以参考spring通过自定义标签干预bean的生成过程。1.2:自定义bean同级标签这种方式可以掌控自定义标签解析为BeanDefinition的过程,详细可以参考spring是如何解析自定义标签的。2:BeanFactory对原创 2021-03-11 09:01:02 · 981 阅读 · 0 评论 -
spring的FactoryBean分析
1:有什么用正常我们创建bean的时候都是使用配置的方式,配置后由spring来统一加载创建放到IOC容器中,比如只是简单的通过构造函数,通过setter方法等创建,并且相关的参数的值也都是确定的,此时使用配置的方式无疑是最好的选择,但是如果是bean创建没有那么简单,比如创建对象需要数据需要经过复杂的解析,配置的方式就无法实现了。...原创 2021-03-10 17:31:41 · 242 阅读 · 0 评论 -
spring使用bean定义初始化bean分析
spring使用bean定义初始化bean分析原创 2021-03-09 17:13:58 · 511 阅读 · 0 评论 -
spring IOC注册BeanDefinition
spring IOC注册BeanDefinition原创 2021-03-07 19:44:52 · 225 阅读 · 0 评论 -
spring是如何解析自定义标签的
spring是如何解析自定义标签的原创 2021-03-06 18:08:11 · 191 阅读 · 0 评论 -
spring通过自定义标签干预bean的生成过程
1:原理在spring解析xml为BeanDefinition的过程中,解析bean标签在解析了6个主要的默认标签标签之后,会调用解析自定义标签,这些自定义标签也是bean标签的子标签,我们可以编写这些自定义标签的处理器,在该注册器内可以通过修改当前的BeanDefinition来打到干预bean的生成的效果,然后注册自定义注册器,注册之后spring在解析自定义标签的时候就会通过标签名注意不带有命名空间获取我们自定义的注册器,并调用。2:例子我们要实现的效果是,通过自定义标签,来修改通过proper原创 2021-03-06 11:26:30 · 253 阅读 · 3 评论