![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring系列
文章平均质量分 90
智能编程设计工作室
这个作者很懒,什么都没留下…
展开
-
Spring系列之详解spring声明式事务(@Transactional)
什么是声明式事务?所谓声明式事务,就是通过配置的方式,比如通过配置文件(xml)或者注解的方式,告诉spring,哪些方法需要spring帮忙管理事务,然后开发者只用关注业务代码,而事务的事情spring自动帮我们控制。比如注解的方式,只需在方法上面加一个@Transaction注解,那么方法执行之前spring会自动开启一个事务,方法执行完毕之后,会自动提交或者回滚事务,而方法内部没有任何事务相关代码,用起来特别的方法。@Transactionpublicvoidinsert(Stri..原创 2022-05-16 09:11:43 · 1731 阅读 · 0 评论 -
Spring系列之spring中编程式事务怎么用的?
本文内容详解spring中编程式事务的使用。spring中使用事务的2种方式spring使事务操作变的异常容易了,spring中控制事务主要有2种方式 编程式事务:硬编码的方式 声明式事务:大家比较熟悉的注解@Transaction的方式 编程式事务什么是编程式事务?通过硬编码的方式使用spring中提供的事务相关的类来控制事务。编程式事务主要有2种用法 方式1:通过PlatformTransactionManager控制事务 方式2:通过Tran原创 2022-05-16 09:09:48 · 1540 阅读 · 0 评论 -
Spring系列之玩转JdbcTemplate
本来这篇文章要写spring事务的,但是事务中大部分案例会用到JdbcTemplate相关的功能,所以先把JdbcTemplate拿出来说一下。什么是JdbcTemplate?大家来回顾一下,java中操作db最原始的方式就是纯jdbc了,是不是每次操作db都需要加载数据库驱动、获取连接、获取PreparedStatement、执行sql、关闭PreparedStatement、关闭连接等等,操作还是比较繁琐的,spring中提供了一个模块,对jdbc操作进行了封装,使其更简单,就是本文要讲的Jdb原创 2022-05-15 13:33:17 · 766 阅读 · 1 评论 -
Spring系列之@EnableCaching集成redis缓存
安装redis下载地址:https://redis.io/downloadpom.xml中引入redis配置<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.3</version></dependency>项目中创建redis配置...原创 2022-05-15 10:10:27 · 981 阅读 · 1 评论 -
Spring系列之缓存使用(@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)
本文主要详解spring中缓存的使用。背景缓存大家都有了解过吧,主要用来提升系统查询速度。比如电商中商品详情信息,这些信息通常不会经常变动但是会高频访问,我们可以将这些信息从db中拿出来放在缓存中(比如redis中、本地内存中),当获取的时候,先从缓存中获取,缓存中没有的时候,再从db中获取,然后将其再丢到缓存中,当商品信息被变更之后,可以将缓存中的信息剔除或者将最新的数据丢到缓存中。Spring中提供了一整套的缓存解决方案,使用起来特别的容易,主要通过注解的方式使用缓存,常用的有5个注解,原创 2022-05-14 08:58:06 · 2034 阅读 · 0 评论 -
Spring系列之强大的Spel表达式
本文带你玩转spring中强大的spel表达式!Spel概述Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并且能与Spring功能完美整合,如能用来配置Bean定义。表达式语言给静态Java语言增加了动态功能。SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用。Spel能干什么?表达式语言一般是原创 2022-05-14 08:56:58 · 6183 阅读 · 0 评论 -
Spring系列之@Scheduled & @EnableScheduling定时器详解
spring中@Scheduled & @EnableScheduling这2个注解,可以用来快速开发定时器,使用特别的简单。如何使用?用法1、需要定时执行的方法上加上@Scheduled注解,这个注解中可以指定定时执行的规则,稍后详细介绍。2、Spring容器中使用@EnableScheduling开启定时任务的执行,此时spring容器才可以识别@Scheduled标注的方法,然后自动定时执行。案例db中有很多需要推送的任务,然后将其检索出来,推送到手机端,来个定时器..原创 2022-05-13 09:24:43 · 508 阅读 · 0 评论 -
Spring系列之@EnableAsync & @Async 实现方法异步调用
1、本文内容详解 @EnableAsync & @Async,主要分下面几个点进行介绍。 作用 用法 获取异步执行结果 自定义异步执行的线程池 自定义异常处理 线程隔离 源码 & 原理 2、作用spring容器中实现bean方法的异步调用。比如有个logService的bean,logservice中有个log方法用来记录日志,当调用logService.log(msg)的时候,希望异步执行,那么可以通过@En原创 2022-05-13 09:22:53 · 579 阅读 · 0 评论 -
Spring系列之@EnableAspectJAutoProxy、@Aspect中通知顺序详解
@EnableAspectJAutoProxy自动为bean创建代理对象@EnableAspectJAutoProxy可以自动为spring容器中符合条件的bean创建代理对象,@EnableAspectJAutoProxy需要结合@Aspect注解一起使用。用法比较简单,下面我们通过案例来看一下。先在com.javacode2018.aop.demo11.test1包中定义2个beanUserService beanpackagecom.javacode2018.aop.demo11..原创 2022-05-12 10:06:40 · 924 阅读 · 0 评论 -
Spring系列之@Aspect中5中通知详解
@Aspect中有5种通知 @Before:前置通知, 在方法执行之前执行 @Aroud:环绕通知, 围绕着方法执行 @After:后置通知, 在方法执行之后执行 @AfterReturning:返回通知, 在方法返回结果之后执行 @AfterThrowing:异常通知, 在方法抛出异常之后 这几种通知用起来都比较简单,都是通过注解的方式,将这些注解标注在@Aspect类的方法上,这些方法就会对目标方法进行拦截,下面我们一个个来看一下。@Before:前原创 2022-05-12 10:04:47 · 1522 阅读 · 0 评论 -
Spring系列之@Aspect中@Pointcut 12种用法
先了解几个概念文中会涉及几个概念,先了解一下。target用来表示目标对象,即需要通过aop来增强的对象。proxy代理对象,target通过aop增强之后生成的代理对象。AspectJAspectJ是什么?AspectJ是一个面向切面的框架,是目前最好用,最方便的AOP框架,和spring中的aop可以集成在一起使用,通过Aspectj提供的一些功能实现aop代理变得非常方便。AspectJ使用步骤1.创建一个类,使用@Aspect标注2.@Aspect标注的类原创 2022-05-11 09:28:48 · 2054 阅读 · 1 评论 -
Spring系列之ProxyFactoryBean创建AOP代理
AOP创建代理的方式主要分为2大类手动方式也称为手动的方式,需要通过硬编码一个个创建代理。自动化的方式也称为批量的方式,批量的方式用在spring环境中,通过bean后置处理器来对符合条件的bean创建代理手动的方式基本上是采用硬编码的方式,相对来说更灵活一些,可以脱离spring环境使用,而自动化的方式主要用在spring环境中,和spring集成起来更容易一些,更强大一些。AOP创建代理相关的类左边的ProxyCreatorSupport下面的都是手动的方式,有3个类。原创 2022-05-11 09:26:15 · 1455 阅读 · 0 评论 -
Spring系列之AOP核心源码、原理详解
本文主要分4部分 Aop原理介绍 介绍aop相关的一些类 通过源码详解aop代理的创建过程 通过源码详解aop代理的调用过程 Aop代理一些特性的使用案例 Spring AOP原理原理比较简单,主要就是使用jdk动态代理和cglib代理来创建代理对象,通过代理对象来访问目标对象,而代理对象中融入了增强的代码,最终起到对目标对象增强的效果。aop相关的一些类 连接点(JoinPoint)相关类 通知(Advice)相关的类 切原创 2022-05-10 09:17:06 · 472 阅读 · 0 评论 -
Spring系列之aop概念详解
本文主要内容 什么是Aop? Spring AOP中重要的一些概念详解 Spring AOP 硬编码实现 什么是AOP?先看一下传统程序的流程,比如银行系统会有一个取款流程我们可以把方框里的流程合为一个,另外系统还会有一个查询余额流程,我们先把这两个流程放到一起:有没有发现,这个两者有一个相同的验证流程,我们先把它们圈起来再说下一步:上面只是2个操作,如果有更多的操作,验证用户的功能是不是需要写很多次?有没有想过可以把这个验证用户的代码是提取原创 2022-05-10 09:11:50 · 807 阅读 · 0 评论 -
Spring系列之jdk动态代理和cglib代理
Spring中有个非常重要的知识点,AOP,即面相切面编程,spring中提供的一些非常牛逼的功能都是通过aop实现的,比如下面这些大家比较熟悉的功能 spring事务管理:@Transactional spring异步处理:@EnableAsync spring缓存技术的使用:@EnableCaching spring中各种拦截器:@EnableAspectJAutoProxy 大家想玩转spring,成为一名spring高手,aop是必须要掌握的,aop这块东西比原创 2022-05-09 09:14:53 · 1990 阅读 · 0 评论 -
Spring系列之BeanFactory扩展(BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor)
先来看几个问题 BeanFactoryPostProcessor是做什么的? BeanDefinitionRegistryPostProcessor是干什么的? BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor有什么区别? 这几个接口的执行顺序是什么样的? Spring容器中主要的4个阶段 阶段1:Bean注册阶段,此阶段会完成所有bean的注册 阶段2:BeanFactory后置原创 2022-05-09 09:13:42 · 358 阅读 · 0 评论 -
Spring之Bean循环依赖详解
今天要说的是spring中循环依赖的问题,最近有大量粉丝问这个问题,也是高薪面试中经常会被问到的一个问题。关于循环依赖的问题,来感受一下连环炮,试试自己否可以过关斩将,轻松应对。 什么是循环依赖? 如何检测是否存在循环依赖? 如何解决循环依赖? 多例的情况下,循环依赖问题为什么无法解决? 单例的情况下,虽然可以解决循环依赖,是否存在其他问题? 为什么采用三级缓存解决循环依赖?如果直接将早期bean丢到二级缓存可以么? 前面4个ok的,超越了80原创 2022-05-08 10:31:49 · 4446 阅读 · 4 评论 -
Spring系列之事件机制详解
面试官:看你是85年的我:嗯,35了面试官:那应该经验很丰富了,那我们来聊聊spring吧我:好,这块我用了10几年了,你随便问吧面试官:Spring中的事件用过么?我:用过面试官:可以介绍一下为什么需要使用事件么?我:使用事件的模式可以对系统进行解耦,事件源发布一个事件,事件监听器可以消费这个事件,而事件源不用关注发布的事件有哪些监听器,这可以可以对系统进行解耦面试官:Spring事件的实现有几种方式?我:整体来说2种方式,第一种是通过接口的方式,第二种是在方法上使用注原创 2022-05-08 10:30:21 · 2253 阅读 · 1 评论 -
Spring系列之国际化详解
前两天去一个电商公司面试:面试官:Spring中国际化这块的东西用过么?可以介绍一下么?我:spring中对国际化支持挺好的,比较简单,只需要按照语言配置几个properties文件,然后主要注册一个国际化的相关的bean,同时需指定一下配置文件的位置,基本上就可以了面试官:那如果配置文件内容有变化?你们怎么解决的?我:这块啊,spring国际化这块有个实现类,可以检测到配置文件的变化,就可以解决你这个问题面试官:那我们是否可以将这些国际化的配置丢到db中去管理呢?我:这个地方我没有原创 2022-05-07 09:15:23 · 1014 阅读 · 0 评论 -
Spring系列之@Value【用法、数据来源、动态刷新】
面试官:Spring中的@Value用过么,介绍一下我:@Value可以标注在字段上面,可以将外部配置文件中的数据,比如可以将数据库的一些配置信息放在配置文件中,然后通过@Value的方式将其注入到bean的一些字段中面试官:那就是说@Value的数据来源于配置文件了?我:嗯,我们项目最常用更多就是通过@Value来引用Properties文件中的配置面试官:@Value数据来源还有其他方式么?我:此时我异常开心,刚好问的我都研究过,我说:当然有,可以将配置信息放在db或者其他存储介质中原创 2022-05-07 09:14:17 · 6587 阅读 · 0 评论 -
Spring系列之父子容器详解
又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是controller层交给一个spring容器加载,其他的service和dao层交给另外一个spring容器加载,web.xml中有这块配置,这两个容器组成了父子容器的关系。我:哦,原来是这块啊,我想起来了,我看大家都这么用,所以我也这么用面试官:有没有考虑过为什么?我:我在网上看大家都这么用,所以我原创 2022-05-06 09:13:09 · 1247 阅读 · 0 评论 -
Spring系列之Bean生命周期详解
来看几个问题 想不想月薪超过5万? 想不想进入公司架构组? 想不想成为项目组的负责人? 想不想成为spring的高手,超越99%的对手? 那么本文内容是你必须要掌握的。本文主要详解bean的生命周期,分为13个环节,每个环节中spring都提供了一些扩展点,我们都将进行详细说明,让大家全面掌握这块的知识。Spring bean生命周期13个环节 阶段1:Bean元信息配置阶段 阶段2:Bean元信息解析阶段 阶段3:将Bean注册到容原创 2022-05-06 09:11:20 · 1385 阅读 · 1 评论 -
Spring系列之@Scope、@DependsOn、@ImportResource、@Lazy 详解
面试问题 @Scope是做什么的?常见的用法有几种? @DependsOn是做什么的?常见的用法有几种? @ImportResource干什么的?通常用在什么地方? @Lazy做什么的,通常用在哪些地方?常见的用法有几种? 上面几个问题中涉及到了4个注解,都是比较常用的,下面我们来一一介绍。@Scope:指定bean的作用域用法关于什么是bean的作用域,可以去看一下之前的一篇文章:Spring系列第6篇:玩转bean scope,避免跳坑里!@Sco原创 2022-05-05 09:19:08 · 422 阅读 · 0 评论 -
Spring系列之注解实现依赖注入(@Autowired、@Resource、@Primary、@Qulifier)
先来看几个问题 通过注解的方式注入依赖对象,介绍一下你知道的几种方式 @Autowired和@Resource有何区别 说一下@Autowired查找候选者的过程 说一下@Resource查找候选者的过程 @Qulifier有哪些用法? @Qulifier加在类上面是干什么用的? @Primary是做什么的? 泛型注入用过么? 这些问题如果你都ok,那么恭喜你,很厉害。本文内容 介绍spring中通过注解实现依赖注入的原创 2022-05-05 09:17:47 · 4854 阅读 · 0 评论 -
Spring系列之@Conditional通过条件来控制bean的注册
面试阿里p7被问到的问题(当时我只知道第一个): @Conditional是做什么的? @Conditional多个条件是什么逻辑关系? 条件判断在什么时候执行? ConfigurationCondition和Condition有什么区别?什么时候使用ConfigurationCondition? 多个Condition执行的顺序是什么样的?可以配置优先级么? 可以介绍一下@Conditional常见的一些用法么? @Conditional注解原创 2022-05-02 11:16:45 · 604 阅读 · 1 评论 -
Spring系列之@import详解(bean批量注册)
@Import出现的背景目前为止,注解的方式批量注册bean,前面2篇文章中,我们介绍了2种方式:到目前,我们知道的批量定义bean的方式有2种: @Configuration结合@Bean注解的方式 @CompontentScan扫描包的方式 下面我们来看几个问题。问题1如果需要注册的类是在第三方的jar中,那么我们如果想注册这些bean有2种方式: 通过@Bean标注方法的方式,一个个来注册 @CompontentScan的方式:默认的@Compont原创 2022-05-02 11:15:10 · 1865 阅读 · 1 评论 -
Spring系列之@ComponentScan、@ComponentScans详解(bean批量注册)
灵魂拷问 @ComponentScan注解是做什么的? basePackages的方式和basePackageClasses的方式有什么区别?你建议用哪个?为什么? useDefaultFilters有什么用? 常见的过滤器有哪些类型?说说你知道的几个 @ComponentScan是在哪个类中处理的?说一下大概的解析过程? 这些问题如果都ok,恭喜你,太优秀了,不知道没关系,一起来看看。背景介绍到目前为止,介绍了2种注册bean的方式: xml原创 2022-05-01 20:43:04 · 1213 阅读 · 0 评论 -
Spring系列之@Configration和@Bean注解详解(bean批量注册)
上次去头条面试:面试官:spring中,类上加不加@Configuration注解,有什么区别?我:当某个类上有@Configuration注解的时候,可以在这个类中使用@Bean注解向spring容器中注册bean;如果不加@Configuration注解,不能通过@Bean注解注册bean。面试官:你确定不用@Configuration注解,不能通过@Bean注解来注册bean?我:看着面试官,犹豫了10秒钟,说:不加@Configuration通过@Bean注解也可以注册bean面原创 2022-05-01 20:40:42 · 1813 阅读 · 1 评论 -
Spring系列之深入理解java注解及spring对注解的增强(预备知识)
最近有个朋友去阿里面试,被面试官来了个灵魂拷问: 注解是干什么的? 一个注解可以使用多次么?如何使用? @Inherited是做什么的? @Target中的`TYPE_PARAMETER和TYPE_USER`用在什么地方? 泛型中如何使用注解? 注解定义可以实现继承么? spring中对注解有哪些增强?@Aliasfor注解是干什么的? 第1个他回答上来了,后面的几个直接懵了,然后就没有然后了。之后跑来问我,然后我让他看本文,准备下次原创 2022-04-30 08:23:17 · 533 阅读 · 0 评论 -
Spring系列之代理详解(Java动态代理&cglib代理)
本文内容 为什么需要用代理 jdk动态代理玩法详解 cglib代理常见的各种玩法详解 代理spring中用到的挺多的,比如上篇文章中的lookup-method和replaced-method,以及后面我们要学的aop、spring中的事务、spring中解析@configuration注解等等,这些都是依靠代理来实现的,所以我们先把代理拿出来讲讲,有利于我们理解其他内容。为什么要用代理我们先来看一个案例。有一个接口IService,如下:package.原创 2022-04-30 08:21:52 · 2540 阅读 · 3 评论 -
Spring系列之单例bean中使用多例bean
lookup-method:方法查找通常情况下,我们使用的bean都是单例的,如果一个bean需要依赖于另一个bean的时候,可以在当前bean中声明另外一个bean引用,然后注入依赖的bean,此时被依赖的bean在当前bean中自始至终都是同一个实例。先来个案例回顾一下packagecom.javacode2018.lesson001.demo13.normal;publicclassServiceA{}packagecom.javacode2018.lesson0...原创 2022-04-29 19:43:14 · 2106 阅读 · 0 评论 -
Spring系列之使用继承简化bean配置(abstract & parent)
先来看一个案例ServiceA.javapackagecom.javacode2018.lesson001.demo12;publicclassServiceA{}ServiceB.javapackagecom.javacode2018.lesson001.demo12;publicclassServiceB{privateStringname;privateServiceAserviceA;publicString...原创 2022-04-29 19:42:01 · 1192 阅读 · 0 评论 -
Spring系列之lazy-init:bean延迟初始化
bean初始化的方式2种方式 实时初始化 延迟初始化 bean实时初始化在容器启动过程中被创建组装好的bean,称为实时初始化的bean,spring中默认定义的bean都是实时初始化的bean,这些bean默认都是单例的,在容器启动过程中会被创建好,然后放在spring容器中以供使用。实时初始化bean的有一些优点 更早发下bean定义的错误:实时初始化的bean如果定义有问题,会在容器启动过程中会抛出异常,让开发者快速发现问题 查找bean更快:容器启动完毕之原创 2022-04-29 19:40:32 · 328 阅读 · 0 评论 -
Spring系列之bean中的autowire-candidate又是干什么的?
当容器中某种类型的bean存在多个的时候,此时如果我们从容器中查找这种类型的bean的时候,会报下面这个异常:org.springframework.beans.factory.NoUniqueBeanDefinitionException原因:当从容器中按照类型查找一个bean对象的时候,容器中却找到了多个匹配的bean,此时spring不知道如何选择了,处于懵逼状态,就会报这个异常。这种异常主要出现在2种场景中:场景1:从容器容器中查找符合指定类型的bean,对应BeanFact原创 2022-04-27 09:10:50 · 358 阅读 · 1 评论 -
Spring系列之primary可以解决什么问题?
存在的问题以及解决方案直接上案例,通过案例来看技术是如何使用的:packagecom.javacode2018.lesson001.demo8;publicclassNormalBean{publicinterfaceIService{}//@1publicstaticclassServiceAimplementsIService{}//@2publicstaticclassServiceBimplementsIService{...原创 2022-04-27 09:07:00 · 505 阅读 · 0 评论 -
Spring系列之depend-on的作用
本文主要讨论一下bean的创建和销毁的顺序,如何来干预bean的创建和销毁的顺序。无依赖bean创建和销毁的顺序我们先来看一下没有任何依赖的bean的创建和销毁的顺序。下面的xml中定义了3个bean:<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/200...原创 2022-04-26 09:10:35 · 458 阅读 · 0 评论 -
彻底搞懂 SpringBoot jar 可执行原理
spring-boot-maven-pluginSpringBoot 的可执行jar包又称fat jar ,是包含所有第三方依赖的 jar 包,jar 包中嵌入了除 java 虚拟机以外的所有依赖,是一个all-in-one jar包。普通插件maven-jar-plugin生成的包和spring-boot-maven-plugin生成的包之间的直接区别,是fat jar中主要增加了两部分,第一部分是lib目录,存放的是Maven依赖的jar包文件,第二部分是spring boot loader..原创 2022-04-25 09:17:19 · 522 阅读 · 0 评论 -
Spring系列之自动注入(autowire)详解
本文内容 手动注入的不足 Class.isAssignableFrom方法介绍 3种自动注入方式详解及案例 按名称自动注入 按类型自动注入 按构造器进行自动注入 按类型自动注入某种类型的所有bean给List和Map(重点) autowire=default介绍 总结 案例源码 手动注入的不足上篇文章中介绍了依赖注入中的手动注入,所谓手动注入是指在xml中采用硬编码的方式来配置注入的对象,比如通过构造器注原创 2022-04-23 10:19:00 · 5078 阅读 · 0 评论 -
Spring系列之依赖注入---手动注入
本文内容 主要介绍xml中依赖注入的配置 构造器注入的3种方式详解 set方法注入详解 注入容器中的其他bean的2种方式 其他常见类型注入详解 依赖回顾通常情况下,系统中类和类之间是有依赖关系的,如果一个类对外提供的功能需要通过调用其他类的方法来实现的时候,说明这两个类之间存在依赖关系,如:publicclassUserService{publicvoidinsert(UserModelmodel){//插入...原创 2022-04-23 10:17:36 · 1104 阅读 · 0 评论 -
Spring系列之玩转bean scope
本文内容 详细介绍5中bean的sope及使用注意点 自定义作用域的实现 应用中,有时候我们需要一个对象在整个应用中只有一个,有些对象希望每次使用的时候都重新创建一个,spring对我们这种需求也提供了支持,在spring中这个叫做bean的作用域,xml中定义bean的时候,可以通过scope属性指定bean的作用域,如:<beanid=""class=""scope="作用域"/>spring容器中scope常见的有5种,下面我们分别来介绍一下。...原创 2022-04-23 10:14:04 · 442 阅读 · 0 评论