Spring
文章平均质量分 61
二狗家有矿
这个作者很懒,什么都没留下…
展开
-
spring事务传递机制原理
1,Propagation.REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。详细解释在代码下方。看下代码员工service@Servicepublic class EmployeeServiceImpl implements EmployeeService { @Autowired EmployeeMapper employeeMapper; @Autowired DepartmentService dep转载 2021-04-02 11:47:55 · 292 阅读 · 0 评论 -
Spring 如何解决循环依赖?
1. 过程演示关于Spring bean的创建,其本质上还是一个对象的创建,既然是对象,读者朋友一定要明白一点就是,一个完整的对象包含两部分:当前对象实例化和对象属性的实例化。在Spring中,对象的实例化是通过反射实现的,而对象的属性则是在对象实例化之后通过一定的方式设置的。这个过程可以按照如下方式进行理解:理解这一个点之后,对于循环依赖的理解就已经帮助一大步了,我们这里以两个类A和B为例进行讲解,如下是A和B的声明:@Componentpublic clas...转载 2021-03-25 09:38:51 · 102 阅读 · 0 评论 -
面试官:“谈谈Spring中都用到了那些设计模式?”。
JDK 中用到了那些设计模式?Spring 中用到了那些设计模式?这两个问题,在面试中比较常见。我在网上搜索了一下关于 Spring 中设计模式的讲解几乎都是千篇一律,而且大部分都年代久远。所以,花了几天时间自己总结了一下,由于我的个人能力有限,文中如有任何错误各位都可以指出。另外,文章篇幅有限,对于设计模式以及一些源码的解读我只是一笔带过,这篇文章的主要目的是回顾一下 Spring 中的设计模式。Design Patterns(设计模式) 表示面向对象软件开发中最好的计算机编...转载 2021-03-11 11:03:45 · 120 阅读 · 0 评论 -
Spring源码系列(二十)Spring创建Bean的过程(八)
1.写在前面笔者在前面的博客已经介绍了spring的属性注入的流程了,接下来继续走剩下的流程。今天笔者主要带大家看的就是initializeBean()方法。也就是初始化Bean的方法。2.initializeBean()方法废话不多说直接上代码,直接看initializeBean()的方法,具体的代码如下,主要是属性注入完成后调用的代码protected Object initializeBean(String beanName, Object bean, @Nullable RootB转载 2021-02-10 09:11:23 · 249 阅读 · 0 评论 -
Spring源码系列(十九)Autowired注解的查找规则
1.写在前面笔者上篇博客已经介绍了对应的属性注入的流程了,但是属性注入中@Autowired的注解的属性注入的查找对应的属性,这块笔者没有讲,这块也是@Autowired比较重要的部分。网上很多说@Autowired的注解是先根据类型找,然后如果类型找不到再根据名字找,那么从源码的角度来说,是不是对的呢?2.一个简单的例子笔者先创建一个接口I,然后写两个实现类B和C,这个时候再创建一个A类,在A类中我们注入I,然后看能不能注入成功,具体的代码如下:package com.ys.autowi转载 2021-02-09 01:38:32 · 514 阅读 · 0 评论 -
Spring源码系列(十八)Spring创建Bean的过程(七)
1.写在前面笔者前面已经讲了属性注入的元数据的获取,今天笔者带着大家继续往下讲,今天主要讲的是属性注入的源码。2.属性注入废话不多说,,继续接着上篇博客来讲剩下代码,具体的代码如下:protected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationException { // Instantiate the bean.转载 2021-02-09 01:34:27 · 183 阅读 · 0 评论 -
Spring源码系列(十七)Spring创建Bean的过程(六)
1.写在前面笔者在前面的几篇博客已经讲spring创建的Bean的过程中的实例化的Bean的过程,同时将调用Bean的后置处理器的前两次的情况已经讲完了。笔者今天继续往下讲。今天笔者这篇博客会讲spring第三次调用Bean后置处理器的情况。2.Spring获取一个类中加了@Resource或@Autowired注解的过程上篇博客已经讲完了几种创建Bean实例的过程,让我们继续讲剩下的代码,具体的代码如下:protected Object doCreateBean(String beanN转载 2021-02-09 01:31:03 · 198 阅读 · 0 评论 -
Spring源码系列(十六)Spring合并BeanDefinition的原理
1.写在前面前面的博客,笔者介绍spring中创建Bean的过程,但是还是没有讲完,只讲了如何将这个Bean给实例化出来,但是有关这个bean的所有的内容、属性等等东西,都还没有填充,由于将后面的创建的Bean的流程,需要了解合并BeanDefinition的原理,所以今天笔者打算讲下合并BeanDefinition的原理讲下。2.什么是合并BeanDefinition我们先来看个例子,具体的代码如下:package com.ys.mergeBeanDefinition;public转载 2021-02-09 01:28:41 · 411 阅读 · 0 评论 -
Spring源码系列(十五)Spring创建Bean的过程(五)
1.写在前面前面几篇博客介绍Spring实例化的Bean的过程,各种情况都讲了一边,还剩最后一点点没有讲,今天笔者打算讲完,如果篇幅够得的话,笔者打算对实例化Bean的来个总结。废话不多说,直接上代码。2.Spring实例化Bean的过程上篇博客笔者主要讲了推断构造方法后,然后对四个条件进行判断,如果有一个条件成立的话,就会执行autowireConstructor(beanName, mbd, ctors, args);方法,今天笔者继续来讲createBeanInstance()方法,继续看转载 2021-02-09 01:26:17 · 181 阅读 · 0 评论 -
Spring源码系列(十四)Spring创建Bean的过程(四)
1.写在前面上篇博客主要讲了一些Spring的推断构造函数的过程,同时也讲了一下多种的情况,具体可以参考我的博客:Spring源码系列(十三)Spring创建Bean的过程(三),今天要讲的就是普通方式实例化Bean的过程,废话不多说,直接上代码。2.Spring中自动装配模式实例化Bean上篇博客我们主要讲了下Spring中的构造函数的推断,同时也得出了一些结论,主要讲的还是createBeanInstance()方法,具体的代码如下:protected BeanWrapper crea转载 2021-02-09 01:24:41 · 930 阅读 · 1 评论 -
Spring源码系列(十三)Spring创建Bean的过程(三)
1.写在前面上篇博客笔者主要讲了spring调用doCreateBean(beanName, mbdToUse, args);方法的前面的一小部分,后面还有许多的东西没有讲,今天笔者打算继续往后讲。废话不多说,直接开启今天的博客之旅吧。这篇博客篇幅过长,请读者耐心享用。2.Spring中推断构造函数上篇博客中讲到doCreateBean(beanName, mbdToUse, args);方法中的创建Bean的实例的方法createBeanInstance(beanName, mbd, args转载 2021-02-09 01:19:37 · 328 阅读 · 0 评论 -
Spring源码系列(十二)Spring创建Bean的过程(二)
1.写在前面上篇博客主要Spring在创建Bean的时候,第一次调用的Bean的后置处理器的过程,同时笔者也打算将整个Spring创建的Bean的过程,通过这个系列,将Bean的创建过程给讲清楚,废话不多说,我们继续看剩下的代码。这篇博客篇幅过于长,请读者耐心的看完所有的内容。2.Spring实例化Bean之instanceSupplier创建我们直接看代码,具体的代码如下:@Overrideprotected Object createBean(String beanName, Roo转载 2021-02-09 01:15:01 · 1161 阅读 · 0 评论 -
Spring源码系列(十一)Spring创建Bean的过程(一)
1.写在前面从今天开始,笔者开始介绍Spring Bean的创建过程,这块是Spring比较重要的一部分,笔者可能要花很多篇博客来介绍这个spring创建Bean的过程。这块涉及到spring各种内置的BeanPostProcessor的执行的顺序。这些BeanPostProcessor对Bean的整个生命周期起到很大的作用,从初始化到实例化到销毁等等。所以笔者打算好好讲下这些内置的BeanPostProcessor的作用及执行时机。2.spring的内置的BeanPostProcessor有哪些?转载 2021-02-09 01:09:26 · 344 阅读 · 1 评论 -
Spring源码系列(十)MapperScan注解的原理(二)
1.写在前面上篇博客中笔者介绍怎么Import注解中的类给变成一个BeanDefinition添加到Spring的IOC的容器中,主要调用的是这个类(MapperScannerRegistrar)的registerBeanDefinitions(),由于篇幅的原因,笔者只介绍了如何调用的MapperScannerRegistrar类中的registerBeanDefinitions()的方法。具体方法中的逻辑还没有讲,由于Mybatis-Spring这个有两个版本,所以笔者今天就打算讲下这两个版本的实现转载 2021-02-09 01:07:02 · 386 阅读 · 0 评论 -
Spring源码系列(九)MapperScan注解的原理(一)
1.写在前面前面的博客已经写了BeanFactoryPostProcessor的执行的时机和顺序,同时也介绍了对应的扫描机制,笔者也通过模拟了一个自定义的注解来模拟MapperScan注解,但是由于篇幅的原因,笔者只简单的模拟了一下,今天笔者决定花一篇博客来介绍一下MapperScan的源码,同时由于MapperScan有两个版本,笔者也会一一介绍。2.如何使用在spring中使用mybatis由于本篇博客博客是讲源码的,所以这儿的应用不会深入的讲,只会讲一些简单的使用,我们先打开mybatis转载 2021-02-08 09:12:09 · 752 阅读 · 0 评论 -
Spring源码系列(八)Spring Aop(一)
1.写在前面今天笔者来讲一下Spring Aop的专题,由于Aop的源码比较复杂,所以我们要对Aop的使用要做到精通,不然看源码的时候,就会比较吃力,今天不会涉及到源码的东西,主要讲的就是Aop应用这块,同时会介绍一些关于AOP的面试题。2.Spring AOP常见的面试题2.1AOP是什么?提高AOP(面向切面编程)就不得不提OOP(面向对象编程)。与OOP对比,面向切面,传统的OOP开发中代码的逻辑是自上而下的,而这些过程会产生一些横切性问题,这些横切性的问题和我们的主业务逻辑关系不大,转载 2021-02-08 09:11:53 · 120 阅读 · 0 评论 -
Spring源码系列(七)Spring中的循环依赖
1.写在前面笔者前面写的Spring的源码系列,有很多都跳过了,没有细讲,因为有些模块是讲不了的,例如:上篇博客中讲的Configuration注解其中提到的spring的生命周期,笔者只是一笔带过,因为其中要讲到Aop的代理,这块也没有讲,所以Spring的生命周期,没有办法讲,等笔者将这些全讲了,就可以将这些东西给串起来讲了。今天讲的是spring的中的循环依赖(循环引用)的原理和解决办法。2.什么是循环依赖假设有一个对象A和一个对象B,A依赖B,B依赖A,这就叫循环依赖。那么Spring支转载 2021-02-08 09:11:37 · 432 阅读 · 0 评论 -
Spring源码系列(六)你真的理解Spring的Configuration的注解吗?
1.写在前面上一篇博客大概讲了一下Spring的扫描机制,但是调用ConfigurationClassPostProcessor类中的postProcessBeanDefinitionRegistry方法,由于这个方法比较复杂,笔者只讲了下什么类会被解析成配置类,还有讲了一下Spring是如何调用的doScan的方法的。解析成配置类最终的表现的形式就是给BeanDefinition中的Attribute的属性中的org.springframework.context.annotation.Configu转载 2021-02-08 09:11:16 · 401 阅读 · 0 评论 -
Spring源码系列(五)Spring扫描机制(二)
1.写在前面上一篇博客中讲到的Spring的扫描机制,但是讲的是Spring提供给外部的api,而且创建的在AnnotationConfigApplicationContext的构造函数中创建的scanner属性,创建的ClassPathBeanDefinitionScanner对象,Spring自己根本没有使用,这个对象是暴露给外部的人使用的。今天我们就真正来讲下Spring是如何扫描的?这里要注意的是Spring扫描也是用这个类的,但是Spring没有用这个scanner属性,而是自己重新创建了一个转载 2021-02-08 09:10:59 · 185 阅读 · 0 评论 -
Spring源码系列(四)Spring扫描机制(一)
1.写在前面前面我们已经介绍了Spring的几种BeanDefinition,同时介绍了几种常用的BeanDefinition中的对应的属性。以及几种BeanDefinition的实现类的区别,同时也介绍了RootBeanDefinition和ChildBeanDefinition的缺点,以及为什么引入GenericBeanDefinition,以及GenericBeanDefinition的优点。今天我们会介绍AnnotationConfigApplicationContext中构造函数中两个属性的意转载 2021-02-08 09:10:40 · 479 阅读 · 0 评论 -
Spring源码系列(三)BeanDefinition(二)
1.写在前面在上篇博客《Spring源码系列(二)BeanDefinition(一)》我们大概的介绍了下BeanDefinition接口中的一些属性,还有两个BeanDefinition的父接口。同时简单的介绍了下对应的实现类AbstractBeanDefinition。但是还有些属性没有介绍,这篇博客会把这些属性介绍了,同时会介绍一下BeanDefinition接口的一些实现类。还是那句话,Spring创建Bean都是根据这个BeanDefinition来的,所以要搞懂Spring的源码,必须要搞懂这转载 2021-02-08 09:10:18 · 398 阅读 · 0 评论 -
Spring源码系列(二)BeanDefinition(一)
1.写在前面如果想系统的学习Spring的源码,我们需要了解就是Spring的中BeanDefinition,简单的说这个就是Spring的Bean的描述信息。因为的Spring中Bean的创建都是根据这个BeanDefinition这个来创建,也可以叫这个为Spring的Bean的建模对象。2.官网对BeanDefinition的解释当我们打开对应的Spring的官网,具体在Bean Overview中有关于BeanDefinition的介绍,具体如下图:大概的意思就是,Spring转载 2021-02-08 09:10:04 · 191 阅读 · 0 评论 -
Spring源码系列(一)你真的理解Spring的自动注入吗?
Spring的自动注入,我想任何一个Java的程序员都会无比的自信的说:这个我知道;但是很遗憾的说,笔者理解的自动注入可能与你们理解的自动注入有很大的出入。那我们需要搞清楚Spring的自动注入是什么?自动注入也可以叫自动装配。只是翻译不同,笔者的英文水平有限,这儿就叫自动注入吧!自动注入的对立面就是手动装配。在Spring的程序中,假设你有个A类依赖了B类,这个时候需要在A类添加一个B类的属性。再加上set方法。然后在xml的配置文件中,描述对应的依赖关系。这个时候IOC容器初始化的过程中会实例化A,在实转载 2021-02-08 09:04:16 · 262 阅读 · 0 评论 -
Spring官方文档阅读(十)之IOC容器(ApplicationCotext其他的功能和BeanFactory)
15.ApplicationContext的其他功能如本章简介中所述,org.springframework.beans.factory包提供了用于管理和操作bean的基本功能,包括以编程方式。org.springframework.context包添加了ApplicationContext接口,该接口扩展了BeanFactory接口,此外还扩展了其他接口以提供更多面向应用程序框架的样式的附加功能。 许多人以完全声明性的方式使用ApplicationContext,甚至没有以编程方式创建它,而是依靠诸.转载 2021-02-08 08:59:37 · 167 阅读 · 1 评论 -
Spring官方文档阅读(九)之IOC容器(环境抽象)
13.环境抽象Environment接口是集成在容器中的抽象,它对应用程序环境的两个关键方面进行建模:概要文件和属性。概要文件是一个命名的bean定义逻辑组,只有在给定的概要文件处于活动状态时才向容器注册。bean可以被分配给一个配置文件,无论这个配置文件是用XML定义的还是用注释定义的。与概要文件相关的Environment对象的作用是确定哪些概要文件(如果有的话)当前处于活动状态,以及默认情况下哪些概要文件(如果有的话)应该处于活动状态。属性在几乎所有应用程序中都起着重要作用,并且可能源自各转载 2021-02-07 20:37:24 · 86 阅读 · 0 评论 -
Spring官方文档阅读(八)之IOC容器(基于Java config的容器配置)
11.使用JSR 330标准注释从Spring 3.0开始,Spring提供对JSR-330标准注释(依赖注入)的支持。 这些注释的扫描方式与Spring注释的扫描方式相同。 要使用它们,您需要在类路径中有相关的jar。注意: 如果使用Maven,则标准Maven存储库(https://repo1.maven.org/maven2/javax/inject/javax.inject/1/)中提供了javax.inject工件。 您可以将以下依赖项添加到文件pom.xml中: <转载 2021-02-07 20:36:25 · 88 阅读 · 0 评论 -
Spring官方文档阅读(七)之IOC容器(类路径扫描)
10.类路径扫描和托管组件本章中的大多数示例都使用XML来指定在Spring容器中生成每个BeanDefinition的配置元数据。 上一节(基于注解的容器配置)演示了如何通过源级别的注解提供许多配置元数据。 但是,即使在这些示例中,“基本” bean定义也已在XML文件中明确定义,而注解仅驱动依赖项注入。 本节介绍了通过扫描类路径来隐式检测候选组件的选项。 候选组件是与过滤条件匹配的类,并在容器中注册了相应的Bean定义。 这消除了使用XML进行bean注册的需要。 而是可以使用注解(例如,@Comp转载 2021-02-07 20:35:18 · 143 阅读 · 0 评论 -
Spring官方文档阅读(六)之IOC容器(基于注解的容器配置)
9.基于注解的容器配置在配置Spring时,注解比XML更好吗?基于注解的配置的引入提出了一个问题,即这种方法是否比XML“更好”。 简短的答案是“取决于情况”。 长话短说,每种方法都有其优缺点,通常,由开发人员决定哪种策略更适合他们。 由于定义方式的不同,注解在声明中提供了很多上下文,从而使配置更短,更简洁。 但是,XML擅长连接组件而不接触其源代码或重新编译它们。 一些开发人员更喜欢将布线放置在靠近源的位置,而另一些开发人员则认为带注解的类不再是POJO,而且,该配置变得分散且难以控制。 无论转载 2021-02-07 20:34:20 · 107 阅读 · 0 评论 -
Spring官方文档阅读(五)之IOC容器(容器的扩展点)
8.容器扩展点通常,应用程序开发人员不需要为ApplicationContext实现类提供子类。 相反,可以通过插入特殊集成接口的实现来扩展Spring IOC容器。 接下来的几节描述了这些集成接口。8.1使用BeanPostProcessor自定义BeanBeanPostProcessor接口定义了回调方法,您可以实施这些回调方法以提供自己的(或覆盖容器的默认值)实例化逻辑,依赖关系解析逻辑等。 如果您想在Spring容器完成实例化,配置和初始化bean之后实现一些自定义逻辑,则可以插入一个或转载 2021-02-07 20:33:23 · 84 阅读 · 0 评论 -
Spring官方文档阅读(四)之IOC容器(自定义bean的性质)
6.自定义Bean的性质Spring框架提供了许多接口,您可以使用这些接口来定制bean的性质。6.1生命周期回调为了与容器对bean生命周期的管理进行交互,您可以实现SpringInitializingBean和DisposableBean接口。 容器为前者调用afterPropertiesSet()并为后者调用destroy(),以使Bean在初始化和销毁Bean时执行某些操作。注意:JSR-250 @PostConstruct和@PreDestroy注解通常被认为是在现代Spri.转载 2021-02-07 17:22:09 · 123 阅读 · 0 评论 -
Spring官方文档阅读(三)之IOC容器(Bean的作用域)
5.Bean的作用域创建bean定义时,将创建一个配方来创建该bean定义所定义的类的实际实例。 bean定义是配方的想法很重要,因为它意味着与类一样,您可以从一个配方中创建许多对象实例。您不仅可以控制要插入到从特定bean定义创建的对象中的各种依赖项和配置值,还可以控制从特定bean定义创建的对象的范围。 这种方法功能强大且灵活,因为您可以选择通过配置创建的对象的范围,而不必在Java类级别上烘烤对象的范围。 可以将Bean定义为部署在多个范围之一中。 Spring框架支持六个范围,其中只有在使用转载 2021-02-07 17:20:11 · 178 阅读 · 0 评论 -
Spring官方文档阅读(二)之IOC容器(依赖注入)
4.依赖典型的企业应用程序不包含单个对象(或Spring术语中的Bean)。 即使是最简单的应用程序,也有一些对象可以协同工作,以呈现最终用户视为一致的应用程序。 下一部分将说明如何从定义多个独立的Bean定义到实现对象协作以实现目标的完全实现的应用程序。4.1依赖注入依赖注入(DI)是一个过程,通过该过程,对象只能通过构造函数参数,工厂方法的参数或在构造或创建对象实例后在对象实例上设置的属性来定义其依赖关系(即,与它们一起工作的其他对象)。 从工厂方法返回。 然后,容器在创建Bean时注入那些转载 2021-02-07 17:15:58 · 163 阅读 · 0 评论 -
Spring官方文档阅读(一)之IOC容器(容器创建和使用)
1.Spring IOC容器和Bean的介绍本章介绍了控制反转(IOC)原理的Spring框架实现。IOC也称为依赖注入(DI)。它是一个过程,对象仅通过构造函数参数、工厂方法的参数或在对象实例被构造或从工厂方法返回后在其上设置的属性来定义它们的依赖项(即它们使用的其他对象)。然后,容器在创建Bean时注入这些依赖项。这个过程基本上是Bean本身的逆过程(因此称为控制反转)org.springframework.beans和org.springframework.context包是Spring Fr转载 2021-02-07 17:06:36 · 179 阅读 · 0 评论 -
spring IOC初始化过程
我们来看一个例子AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(JobService.class); for (String beanname:context.getBeanDefinitionNames()) { S...转载 2020-03-18 09:29:01 · 183 阅读 · 0 评论 -
spring IOC 容器初始化
一、ApplicationContext接口设计ApplicationContext是spring中较高级的容器。和BeanFactory类似,它可以加载配置文件中定义的bean,当有请求的时候分配bean。 另外,它增加了企业所需要的功能,比如,从属性文件解析文本信息和将事件传递给所指定的监听器。接口设计图如下:,ApplicationContext继承5个接口:1.2个核心接...转载 2020-03-17 15:08:58 · 196 阅读 · 1 评论 -
Spring AOP 实现原理
原文地址http://blog.csdn.net/moreevan/article/details/11977115/什么是AOPAOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集转载 2017-02-13 19:55:43 · 255 阅读 · 0 评论 -
Spring面试题整理
Spring 概述1. 什么是spring?spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。2. 使用Spring框架的好处是什么?轻量:Spring 是轻量的,基转载 2017-04-20 14:04:43 · 14842 阅读 · 1 评论 -
Spring IOC和AOP 原理彻底搞懂
原文:http://blog.csdn.net/luoshenfu001/article/details/5816408/Spring提供了很多轻量级应用开发实践的工具集合,这些工具集以接口、抽象类、或工具类的形式存在于Spring中。通过使用这些工具集,可以实现应用程序与各种开源技术及框架间的友好整合。比如有关jdbc封装的数据访问工具Spring JDBC,有关编写单元测试转载 2017-06-27 15:13:48 · 443 阅读 · 0 评论 -
spring之BeanFactory
spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了。那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后就会对spring的原理有一定的了解。 spring使用BeanFactory来实例化、配置和管理对象,但是它只是一个接口,里面有一个getBean()方法。我们一般都不直接用BeanFac转载 2017-06-27 20:10:52 · 252 阅读 · 0 评论 -
Spring JdbcTemplate详解
JdbcTemplate简介 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。 JdbcTemplate位于中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个这个包包含了一下事务和异常控制转载 2017-08-29 15:28:58 · 314 阅读 · 0 评论