Spring
文章平均质量分 90
Young丶
这个作者很懒,什么都没留下…
展开
-
实力总结四类Bean注入Spring的方式
一提到Spring,大家最先想到的是啥?是AOP和IOC的两大特性?是Spring中Bean的初始化流程?还是基于Spring的Spring Cloud全家桶呢?今天我们就从Spring的IOC特性入手,聊一聊Spring中把Bean注入Spring容器的几种方式。我们先来简单了解下IOC的概念:IOC即控制反转,也称为依赖注入,是指将对象的创建或者依赖关系的引用从具体的对象控制转为框架或者IOC容器来完成,也就是依赖对象的获得被反转了。“可以简单理解为原来由我们来创建对象,现在由Spring来创转载 2022-05-20 17:39:24 · 2515 阅读 · 0 评论 -
面试官必问:说说 Spring Bean 的实例化过程?
对于写Java的程序员来说,Spring已经成为了目前最流行的第三方开源框架之一,在我们充分享受Spring IOC容器带来的红利的同时,我们也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的,本期我们就一起来讨论一下Spring中Bean的实例化过程。这里我们并不会详细的分析源代码,只是给出Spr..原创 2022-04-19 06:00:00 · 2033 阅读 · 0 评论 -
spring中那些让你爱不释手的代码技巧
紧接上文《spring中这些能升华代码的技巧,可能会让你爱不释手》。本文继续总结我认为spring中还不错的知识点,希望对您有所帮助。一. @Conditional的强大之处不知道你们有没有遇到过这些问题:某个功能需要根据项目中有没有某个jar判断是否开启该功能。某个bean的实例化需要先判断另一个bean有没有实例化,再判断是否实例化自己。某个功能是否开启,在配置文件中有个参数可以对它进行控制。如果你有遇到过上述这些问题,那么恭喜你,本节内容非常适合你。@ConditionalOnC.原创 2021-02-20 18:59:53 · 856 阅读 · 0 评论 -
spring中这些能升华代码的技巧,可能会让你爱不释手
前言最近越来越多的读者认可我的文章,还是件挺让人高兴的事情。有些读者私信我说希望后面多分享spring方面的文章,这样能够在实际工作中派上用场。正好我对spring源码有过一定的研究,并结合我这几年实际的工作经验,把spring中我认为不错的知识点总结一下,希望对您有所帮助。一 如何获取spring容器对象1.实现BeanFactoryAware接口@Servicepublic class PersonService implements BeanFactoryAware { priva原创 2021-02-20 14:07:20 · 1313 阅读 · 0 评论 -
[Spring 深度解析]第7章 IoC容器的初始化过程
简单来说,IoC容器的初始化是由前面介绍的refresh()方法来启动的,这个方法标志着IoC容器的正式启动。具体来说,这个启动包括BeanDefinition的Resouce定位、载入和注册三个基本过程。如果我们了解如何编程式地使用IoC容器,就可以清楚地看到Resource定位和载入过程的接口调用。在下面的内容里,我们将会详细分析这三个过程的实现。原创 2020-12-23 00:39:08 · 2876 阅读 · 0 评论 -
七种 BeanDefinition,各显其能!
AbstractBeanDefinition 是一个抽象类,它根据 BeanDefinition 中定义的接口提供了相应的属性,并实现了 BeanDefinition 中定义的一部分方法。BeanDefinition 中原本只是定义了一系列的 get/set 方法,并没有提供对应的属性,在 AbstractBeanDefinition 中将所有的属性定义出来了。后面其他的实现类也基本上都是在 AbstractBeanDefinition 的基础上完成的。转载 2023-09-06 11:18:25 · 580 阅读 · 0 评论 -
聊聊Spring AOP 中的Advisor
平时我们项目中涉及到 AOP,基本上就是声明式配置一下就行了,无论是基于 XML 的配置还是基于 Java 代码的配置,都是简单配置即可使用。声明式配置有一个好处就是对源代码的侵入小甚至是零侵入。不过今天松哥要和小伙伴们聊一聊编程式的 AOP,为什么要聊这个话题呢?因为在 Spring 源码中,底层就是通过这种方式创建代理对象的,所以如果自己会通过编程式的方式进行 AOP 开发,那么在看 Spring 中相关源码的时候,就会很好理解了。转载 2023-07-29 22:40:38 · 16325 阅读 · 0 评论 -
小心@Async注解,让我们进入Spring循环依赖的坑
早期暴露出去的对象,可能是 AService 本身或者是 AService 的代理对象,而且是通过 AnnotationAwareAspectJAutoProxyCreator 对象实现的,但是通过 AsyncAnnotationBeanPostProcessor 的回调,会对 AService 对象进行动态代理,这就导致 AService 早期暴露出去的对象跟最后完全创造出来的对象不是同一个,那么肯定就不对了。也就说,AOP 和 @Async 注解虽然底层都是动态代理,但是具体实现的类是不一样的。原创 2023-07-17 06:30:00 · 57870 阅读 · 0 评论 -
Spring依赖注入Bean类型的8种情况详解
到这 Spring 能够注入的 Bean 的 8 种类型就讲完了,其实这 8 种类型可以分为以下几种功能:单一注入,就是注入一个单一的对象集合注入,可以注入数组或者集合延迟注入,比如 @Lazy、ObjectFactory、ObjectProvider、JSR-330 Provider安全注入,不存在不会抛异常,比如 Optional、ObjectProvider。原创 2023-07-14 08:00:00 · 59010 阅读 · 0 评论 -
Spring 中的父子容器你了解吗?
在 SSM 项目中,Spring 容器是父容器,SpringMVC 是子容器,子容器可以访问父容器的 Bean,但是父容器不能访问子容器的 Bean。更近一步,有小伙伴可能也了解过,不用父子容器,单纯就用一个 SpringMVC 容器似乎也可以,项目也能运行。那么现在问题来了:既然单纯一个 SpringMVC 容器就能使项目跑起来,那我们为什么还要用父子容器?父子容器的优势是什么?原创 2023-07-13 07:45:00 · 55636 阅读 · 0 评论 -
Spring探索——既生@Resource,何生@Autowired?
Autowired是 Spring 提供的注解,@Resource是 JDK 提供的注解。Autowired默认的注入方式为byType(根据类型进行匹配),可以配合@Qualifier 实现byName匹配。默认注入的值必须存在,否则报错。除非required = false@Resource默认注入方式为byName(根据名称进行匹配),如果byName没有则按照byType匹配,默认注入的值不存在,不会报错。当一个接口存在多个实现类的情况下,@Autowired和@Resource。原创 2023-05-24 09:15:00 · 32772 阅读 · 2 评论 -
Spring 高级依赖注入 —— Bean的延迟依赖查找功能,ObjectFactory 和 ObjectProvider
通过示例代码和源码分析可以更确定延迟的概念,所谓延迟依赖查找就是等真正用到对象的时候才去获取对象。那么使用延迟查找的应用场景有哪些呢可以让依赖的资源充分等到初始化完成之后再使用可以和@Lazy注解配合充分实现延迟初始化在本例的代码中,我们只在user()方法上面简单标注了@Bean注解,还可以通过标注@Lazy注解实现User对象的延迟初始化,和配合使用就可以实现真正用到该对象的那一刻才进行初始化操作。可用于解决构造器级别的循环依赖。原创 2023-05-17 14:32:56 · 64149 阅读 · 0 评论 -
Spring Boot 如何让你的 bean 在其他 bean 之前完成加载 ?
这里提到了 ConfigurationClassPostProcessor,实现了 BeanDefinitionRegistryPostProcessor 接口。它是一个非常非常重要的类,甚至可以说它是 Spring boot 提供的扫描你的注解并解析成 BeanDefinition 最重要的组件。原创 2023-05-08 10:37:37 · 60539 阅读 · 0 评论 -
Spring 面试多频 18问
1.spring 中都用到了哪些设计模式?2.spring 中有哪些核心模块?3.说一下你理解的 IOC 是什么?4.spring 中的 IOC 容器有哪些?有什么区别?5.那 BeanFactory 和 FactoryBean 又有什么区别?6.@Repository、@Service、@Compent、@Controller它们有什么区别?7.那么 DI 又是什么?8.说说 AOP 是什么?9.动态代理和静态代理有什么区别?10.JDK 动态代理和 CGLIB 代理有什么区别?11.原创 2022-01-07 17:24:33 · 1970 阅读 · 0 评论 -
Spring源码面试最难问题——循环依赖
问:Spring 如何解决循环依赖?答:Spring 通过提前曝光机制,利用三级缓存解决循环依赖(这原理还是挺简单的,参考:三级缓存、图解循环依赖原理)再问:Spring 通过提前曝光,直接曝光到二级缓存已经可以解决循环依赖问题了,为什么一定要三级缓存?再细问:如果循环依赖的时候,所有类又都需要 Spring AOP 自动代理,那 Spring 如何提前曝光?曝光的是原始 bean 还是代理后的 bean?原创 2023-03-27 08:00:00 · 66805 阅读 · 1 评论 -
Spring AOP CGLib与JDKProxy的区别与示例
综上所述,JDK动态代理适用于代理接口实现类的场景,而CGLIB代理适用于代理没有实现接口的类的场景。如果你需要代理接口实现类,而且不想引入额外的依赖,那么JDK动态代理是一个不错的选择;如果你需要代理没有实现接口的类,那么CGLIB代理可能更适合你的需求。JDK动态代理和CGLIB代理都有它们自己的优缺点。原创 2023-03-02 06:45:00 · 48565 阅读 · 0 评论 -
Spring 注解 @bean 和 @component 的区别, 你知道吗?
注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO。一 概念说明在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O用户空间与内核空间现在操作系统都是采用虚拟存储器,那么对32位操作.转载 2022-02-16 15:28:42 · 2264 阅读 · 0 评论 -
谈谈 @Autowired 的实现原理
目前绝大部分的代码都使用第2、第3种。第1种在bean实例化时完成,而第2、第3种的实现原理都是一样的,在属性填充时完成。本篇将介绍第二第三种的是实现原理在开始之前,如果我们自己设计,我们应该怎么实现?我想做法还是比较简单的类该类是的具体实现类,先预览一下类方法发现实际有机会介入bean的创建操作只有可能是后置处理器,用于后置处理的有3个方法,其中一个过时不用,分别是、后置处理,我们再看一下这2个方法的具体代码跟我们的猜想是一样的,首先先找出所有注解了的属性或者方法,然后...原创 2022-06-22 17:14:42 · 10556 阅读 · 0 评论 -
Spring夺命连环63问
Sping原理Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。Spring是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是它仍然可以和其他的框架无缝整合。Spring 特点轻量级:转载 2022-04-19 21:06:58 · 1993 阅读 · 0 评论 -
代理详解 静态代理+JDK/CGLIB 动态代理实战
1. 代理模式代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自定义的操作。举个例子:你找了小红来帮你问话,小红就可以看作是代理你的代理对象,代理的行为(方法)是问话。代理模式有静态代理和动态代理两种实现方式,我们 先来看一下静态代理模式的实现。2. 静态代理静态转载 2022-03-24 21:53:11 · 1368 阅读 · 0 评论 -
一次性讲清 Spring 常用注解 @Bean 、 @Component 、@Autowire、@Resource 的区别, 你知道吗?
本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较,@ControllerAdvice 是如何处理自定义异常的等等。Spring 中的一些注解1. @Component 和 @Bean 的区别是什么?作用对象不同:@Component 注解作用于类,而 @Bean 注解作用于方法、@Component 通常是通过路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 @ComponentScan 注解定义要扫描的路径原创 2022-03-14 17:33:46 · 3742 阅读 · 0 评论 -
烂大街的Spring循环依赖该如何回答?
从字面上来理解就是,就像上面这样,或者C依赖与自己本身。体现到代码层次就是这个样子虽然体现形式不一样,但是实际上都是循环依赖的问题。Spring解决循环依赖是有的依赖情况依赖注入方式是否解决从上面的测试结果我们可以看到,。Spring bean 的创建,其本质上还是一个对象的创建,既然是对象,一定要明白一点就是,一个完整的对象包含两部分:。在Spring中,对象的实例化是通过实现的,而对象的属性则是在对象实例化之后通过一定的方式设置的。这个过程可以按照如下方式进行理解:大致绘制依赖流程图如下:图中getB原创 2020-12-29 09:59:41 · 2393 阅读 · 0 评论 -
[Spring 深度解析]第6章 Spring的IoC容器系列
IoC容器为开发者管理对象之间的依赖关系提供了很多便利和基础服务。有许多IoC容器供开发者选择,SpringFramework的IoC核心就是其中一个,它是开源的。那具体什么是IoC容器呢?它在Spring框架中到底长什么样?其实对IoC容器的使用者来说,我们经常接触到的BeanFactory和ApplicationContext都可以看成是容器的具体表现形式。如果深入到Spring的实现中去看,我们通常所说的IoC容器,实际上代表着一系列功能各异的容器产品,只是容器的功能有大有小,有各自的特点。原创 2020-12-23 00:38:12 · 2467 阅读 · 0 评论 -
[Spring 深度解析]第5章 Spring之DAO
JDBC(Java DB Connection,Java数据库连接)是一种可用于执行SQL语句的Java API(Application Programming Interface,应用程序设计接口)。它由一些Java语言编写的类和界面组成。JDBC为数据库应用开发人员和数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。JDBC代表Java数据库连接。它是一个软件层,允许开发者在Java中编写客户端/服务器应用。原创 2020-12-23 00:36:48 · 3307 阅读 · 0 评论 -
[Spring 深度解析]第4章 Spring之AOP
在上一章节中,我们大致了解了Spring核心容器,了解了IOC思想在Spring中的具体应用Bean容器以及Bean的配置与使用,这一章我们将开始学习AOP在Spring框架中的具体应用。原创 2020-12-23 00:35:35 · 2365 阅读 · 0 评论 -
[Spring 深度解析]第3章 核心容器
在日常生活中,容器是指用以容纳物料并以壳体为主的基本装置,是用来盛放东西的。在编程中,容器是用来存储和组织其他对象的对象,首先要确定容器也是对象,也可以当作 bean,只是这个对象是用来存储和组织其他对象的,那其他对象是什么呢?其他对象其实就是 bean 对象,这也是面向对象编程的一种体现,万物皆对象。Spring 提供了 BeanFactory、ApplicationContext 两个 IOC 容器来管理众多的 bean 对象。原创 2020-12-23 00:34:23 · 3231 阅读 · 0 评论 -
[Spring 深度解析]第2章 Spring基础
第2章 ◄Spring基础► 在上一章节中,我们学习了Java的注解与反射,在这一章节我们将了解一下Spring框架,并学习Spring框架中重要的编程思想控制反转(IOC)、面向切面编程(AOP)。语言只是工具,最重要的是编程思想。掌握了编程思想,不仅是Java,其他编程语言也就容易学习了。本章主要涉及的知识点: ● Spring概述:了解Spring框架的起源、简介、结构。 ● 依赖注入:什么是依赖注入?依赖注入的好处是什么? ● 控制反转:什么是控制反转?依赖注入与控制反转的联系是什原创 2020-12-16 21:37:30 · 2057 阅读 · 0 评论 -
[Spring 深度解析]第1章 Java基础
第1章 ◄Java基础►在学习Spring之前我们需要对Java基础语法有一定的了解,Java中最重要的两个知识点是注解和反射。注解和反射在Spring框架中应用的最广泛。掌握注解和反射,有助于后面Spring的学习。本章主要涉及的知识点:● 注解基础:什么是注?怎么理解注解?什么是元注解?● 注解应用:自定义注解、注解的应用场景。● 反射:反射的定义、反射的应用。注意不管学习什么框架都需要先把Java基础夯实,基础打好之后才能厚积薄发。用到的时候不能只会用,不知道为什么这样用。学习编程原创 2020-12-16 21:22:25 · 1839 阅读 · 0 评论