Spring成神之路
文章平均质量分 94
小明的学习圈子
专注全栈分享。后端包括:Java,SSM,SpringBoot,微服务,Maven,设计模式,数据库,Linux,Docker,Redis,多线程,中间件等技术。 前端包括:js,css,jQuery,jsp,vue相关等技术。
展开
-
Sring成神之路第五十六篇:spring到底为什么要用三级缓存
A 依赖于 B,B 依赖于 A,比如下面代码今天的内容有点多,大家慢慢消化,有问题欢迎留言!今天的内容有点多,大家慢慢消化,有问题欢迎留言!转载 2023-05-23 01:30:00 · 132 阅读 · 0 评论 -
Spring成神之路第五十五篇:spring 上下文生命周期
接口表示spring上下文,下面2个实现类本文详细介绍了spring应用上下文的生命周期,非常重要,内容和细节稍微比较多,建议大家结合源码多看几遍,平时闲的时候,也可以回头再看几遍,加深理解,有问题的欢迎留言交流。本文详细介绍了spring应用上下文的生命周期,非常重要,内容和细节稍微比较多,建议大家结合源码多看几遍,平时闲的时候,也可以回头再看几遍,加深理解,有问题的欢迎留言交流。转载 2023-05-23 01:30:00 · 184 阅读 · 0 评论 -
Spring成神之路第五十四篇:集成 junit
1、本文详细介绍了junit的用法,常用的注解有@Test、@BeforeClass、@AfterClass、@Before、@After、@Ignore、@RunWith,这些都要掌握2、spring中集成junit,主要的配置就是在测试类上面需要加上下面代码3、开发工具中使用junit更容易1、本文详细介绍了junit的用法,常用的注解有@Test、@BeforeClass、@AfterClass、@Before、@After、@Ignore、@RunWith,这些都要掌握。转载 2023-05-23 01:00:00 · 158 阅读 · 0 评论 -
Spring成神之路第五十三篇:Spring 集成 MyBatis
需要修改MainConfig中SqlSessionFactoryBean的定义,如下,更简洁了,不需要在指定mapper xml的位置了,这里需要注意一点,方式2中将mapper xml文件和mapper接口放在一个目录的时候,这2个文件的名字必须一样,这样在定义SqlSessionFactoryBean的时候才不需要指定mapper xml的位置。本文介绍了spring中集成mybatis的2种方式,2种方式的重点都在上面的小结中,相对来说还是挺简单的,具体用哪种方式,大家自由选择。转载 2023-05-23 01:15:00 · 103 阅读 · 0 评论 -
Spring成神之路第五十二篇:Spring 实现数据库读写分离
大多数系统都是读多写少,为了降低数据库的压力,可以对主库创建多个从库,从库自动从主库同步数据,程序中将写的操作发送到主库,将读的操作发送到从库去执行。。转载 2023-05-23 01:00:00 · 193 阅读 · 0 评论 -
Spring成神之路第五十一篇:导致 Spring 事务失效常见的几种情况
这算是spring事务第9篇文章了,花了这么多篇文章介绍事务这块的知识,说明事务这块的东西确实比较多、知识点比较细,也非常重要,希望大家能够重视起来,吃透这块的知识。转载 2023-05-23 02:00:00 · 117 阅读 · 0 评论 -
Spring成神之路第五十篇:spring 事务拦截器顺序如何控制?
addUser方法上面添加了@Transactional注解,表示使用spring来管理事务,方法内部向db中插入了一条数据,为了方便分析结果,方法内部输出了2行日志)" , "张三");} }下面通过Aspect的方式定义了一个拦截器,顺序通过**@Order(1)设置的是1**,那么这个拦截器会在事务拦截器之前执行。!!");!!");} }这个拦截器的order是3,会在事务拦截器后面执行。!!");!!");} }转载 2023-05-23 04:15:00 · 374 阅读 · 0 评论 -
Spring成神之路第四十九篇:通过 Spring 事务实现 MQ 中的事务消息
好了,今天的内容就到此就讲完了,我们一块来总结回顾一下,你需要重点掌握的内容。1、消息投递的5种方式的推演,要熟练掌握其优缺点2、方式4中事务消息的代码实现,需要大家掌握消息服务使用频率挺高的,通常作为系统中的基础服务使用,大家可以尝试一下开发一个独立的消息服务,提供给其他服务使用。转载 2023-05-23 05:30:00 · 574 阅读 · 0 评论 -
Spring成神之路第四十八篇:@Transaction 事务源码解析
大家好,今天咱们通过源码来了解一下spring中@Transaction事务的原理。开始本文之前,下面这些知识需提前了解下1、2、转载 2023-05-22 20:24:19 · 88 阅读 · 0 评论 -
Spring成神之路第四十七篇:spring 编程式事务源码解析
事务启动的过程中需要定义事务的一些配置信息,如:事务传播行为、隔离级别、超时时间、是否是只读事务、事务名称,spring中使用TransactionDefinition接口表示事务定义信息,下面看一下TransactionDefinition接口源码,主要有5个信息事务传播行为事务隔离级别事务超时时间是否是只读事务事务名称//传播行为:REQUIRED int PROPAGATION_REQUIRED = 0;转载 2023-05-20 11:11:35 · 191 阅读 · 0 评论 -
Spring成神之路第四十六篇:Spring 如何管理多数据源事务?
如下面代码,有2个数据源分别连接数据库ds1和ds2,然后为每个数据源定义了1个事务管理器,此时spring容器中有2个数据源和2个事务管理器。//数据源1 @Bean public DataSource dataSource1() {} //事务管理器1,对应数据源1 @Bean public PlatformTransactionManager transactionManager1(@Qualifier("dataSource1") DataSource dataSource) {转载 2023-05-20 11:05:27 · 1556 阅读 · 0 评论 -
Spring成神之路第四十五篇:带你吃透 Spring 事务 7 种传播行为
事务的传播行为用来描述:系统中的一些方法交由spring来管理事务,当这些方法之间出现嵌套调用的时候,事务所表现出来的行为是什么样的?比如下面2个类,Service1中的m1方法和Service2中的m2方法上面都有@Transactional注解,说明这2个方法由spring来控制事务。但是注意m1中2行代码,先执行了一个insert,然后调用service2中的m2方法,service2中的m2方法也执行了一个insert。那么大家觉得这2个insert会在一个事务中运行么?转载 2023-05-20 10:53:11 · 79 阅读 · 0 评论 -
Spring成神之路第四十四篇:详解 spring 声明式事务(@Transactional)
所谓声明式事务,就是通过配置的方式,比如通过配置文件(xml)或者注解的方式,告诉spring,哪些方法需要spring帮忙管理事务,然后开发者只用关注业务代码,而事务的事情spring自动帮我们控制。比如注解的方式,只需在方法上面加一个注解,那么方法执行之前spring会自动开启一个事务,方法执行完毕之后,会自动提交或者回滚事务,而方法内部没有任何事务相关代码,用起来特别的方法。转载 2023-05-20 10:45:40 · 211 阅读 · 0 评论 -
Spring成神之路第四十篇:缓存使用(@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)
key属性用来指定Spring缓存方法的返回结果时对应的key的,上面说了你可以将Cache理解为一个hashMap,缓存以key->value的形式存储在hashmap中,value就是需要缓存值(即方法的返回值)key属性支持SpEL表达式;当我们没有指定该属性时,Spring将使用默认策略生成key(org.springframework.cache.interceptor.SimpleKeyGenerator),默认会方法参数创建key。转载 2023-05-20 09:51:52 · 2476 阅读 · 0 评论 -
Spring成神之路第四十三篇:spring 中编程式事务怎么用的?
通过硬编码的方式使用spring中提供的事务相关的类来控制事务。大家看了之后,会觉得这样用好复杂啊,为什么要这么玩?的确,看起来比较复杂,代码中融入了大量spring的代码,耦合性比较强,不利于扩展,本文的目标并不是让大家以后就这么用,主要先让大家从硬编码上了解spring中事务是如何控制的,后面学起来才会更容易。我们用的最多的是声明式事务,声明式事务的底层还是使用上面这种方式来控制事务的,只不过对其进行了封装,让我们用起来更容易些。下篇文章将详解声明式事务的使用。转载 2023-05-20 10:38:12 · 215 阅读 · 0 评论 -
Spring成神之路第四十二篇:玩转 JdbcTemplate
大家来回顾一下,java中操作db最原始的方式就是纯jdbc了,是不是每次操作db都需要加载数据库驱动、获取连接、获取PreparedStatement、执行sql、关闭PreparedStatement、关闭连接等等,操作还是比较繁琐的,spring中提供了一个模块,对jdbc操作进行了封装,使其更简单,就是本文要讲的JdbcTemplate,JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。下面我们来看一下JdbcTemplate到底怎么玩的?转载 2023-05-19 21:35:21 · 189 阅读 · 0 评论 -
Spring成神之路第四十一篇:@EnableCaching 集成 redis 缓存
上篇文章主要介绍了,不过文中的案例都是以本地内存作为存储介质的,但是实际上我们的项目上线之后,基本上都会采用集群的方式进行部署,如果将数据存储在本地内存中,集群之间是无法共享的,我们可以将数据存储在redis中,从而实现缓存的共享,下面我们一起来看下。转载 2023-05-19 21:34:22 · 210 阅读 · 0 评论 -
Spring成神之路第三十九篇:强大的 Spel 表达式
Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并且能与Spring功能完美整合,如能用来配置Bean定义。表达式语言给静态Java语言增加了动态功能。SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用。转载 2023-05-19 21:28:29 · 163 阅读 · 0 评论 -
Spring成神之路第三十八篇:@Scheduled & @EnableScheduling 定时器详解
定时器默认情况下使用下面的线程池来执行定时任务的只有一个线程,相当于只有一个干活的人,如果需要定时执行的任务太多,这些任务只能排队执行,会出现什么问题?如果有些任务耗时比较长,导致其他任务排队时间比较长,不能有效的正常执行,直接影响到业务。看下面代码,2个方法,都使用了,表示每秒执行一次,而push1方法中模拟耗时2秒,方法会中打印出线程名称、时间等信息,一会注意观察输出@Component//推送方法,每秒执行一次//休眠2秒,模拟耗时操作。转载 2023-05-19 21:28:30 · 406 阅读 · 0 评论 -
Spring成神之路第三十七篇:@EnableAsync & @Async 实现方法异步调用
默认情况下,使用内置的线程池来异步调用方法,不过我们也可以自定义异步执行任务的线程池。方式1在spring容器中定义一个线程池类型的bean,bean名称必须是taskExecutor@Bean方式2定义一个bean,实现AsyncConfigurer接口中的getAsyncExecutor方法,这个方法需要返回自定义的线程池,案例代码:@Bean/**转载 2023-05-19 21:24:02 · 270 阅读 · 0 评论 -
Spring成神之路第三十六篇:@EnableAspectJAutoProxy、@Aspect 中通知顺序详解
今天内容还是挺多的,大家好好消化一下。主要要掌握中多个时,通知的执行顺序,这个多看看,要理解其原理,记起来才会更容易,用起来也会更顺手。如发现文章有错误、对内容有疑问,都可以在文章下面留言,或者加我微信(itsoku)交流,每周会挑选出一位热心小伙伴,送上一份精美的小礼品,快来关注我吧!转载 2023-05-19 21:18:52 · 126 阅读 · 0 评论 -
Spring成神之路第三十五篇:@Aspect 中 5 中通知详解
定义一个前置通知@AspectSystem.out.println("我是前置通知!");类上需要使用@Aspect标注任意方法上使用@Before标注,将这个方法作为前置通知,目标方法被调用之前,会自动回调这个方法被@Before标注的方法参数可以为空,或者为JoinPoint类型,当为JoinPoint类型时,必须为第一个参数被@Before标注的方法名称可以随意命名,符合java规范就可以,其他通知也类似@Before。转载 2023-05-19 21:17:06 · 123 阅读 · 0 评论 -
Spring成神之路第三十四篇:@Aspect 中@Pointcut 12 种用法
格式:@ 注解(value=“表达标签 (表达式格式)”)本文详解了@Pointcut的12种用法,案例大家一定要敲一遍,敲的过程中,会遇到问题,然后解决问题,才能够加深理解。转载 2023-05-19 21:15:35 · 471 阅读 · 0 评论 -
Spring成神之路第三十三篇:ProxyFactoryBean 创建 AOP 代理
Spring中创建代理主要分为2种:手动方式和自动化的方式手动方式采用硬编码的方式,一次只能给一个目标对象创建代理对象,相对来说灵活一下,对开发者来说更灵活一些,通常可以独立spring环境使用;自动化的方式主要在spring环境中使用,通常是匹配的方式来为符合条件的目标bean创建代理,使用起来更简单一些本文介绍的用来在spring环境中给指定的bean创建代理对象,用到的不是太多,大家可以作为了解即可。转载 2023-05-17 20:15:31 · 213 阅读 · 0 评论 -
Spring成神之路第三十二篇:AOP 核心源码、原理详解
本文内容比较多,大家好好吸收一下,有问题的欢迎留言。下一篇文章将深入详解介绍spring中如何将aop搞成自动化的,东西也是比较多的,敬请期待。转载 2023-05-17 20:13:44 · 122 阅读 · 0 评论 -
Spring成神之路第三十一篇:aop 概念详解
先看一下传统程序的流程,比如银行系统会有一个取款流程我们可以把方框里的流程合为一个,另外系统还会有一个查询余额流程,我们先把这两个流程放到一起:有没有发现,这个两者有一个相同的验证流程,我们先把它们圈起来再说下一步:上面只是2个操作,如果有更多的操作,验证用户的功能是不是需要写很多次?转载 2023-05-17 20:11:47 · 73 阅读 · 0 评论 -
Spring成神之路第三十篇:jdk 动态代理和 cglib 代理
代理这2篇文章是spring aop的基础,基础牢靠了,才能走的更远,大家一定要将这2篇文章中的内容吃透,全面掌握jdk动态代理和cglib代理的使用这些知识点spring aop中全部都用到了,大家消化一下,下一篇讲解spring aop具体是如何玩的。转载 2023-05-17 20:09:34 · 128 阅读 · 0 评论 -
Spring成神之路第二十九篇:BeanFactory 扩展(BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor)
spring中所有bean的注册都会在此阶段完成,按照规范,所有bean的注册必须在此阶段进行,其他阶段不要再进行bean的注册。这个阶段spring为我们提供1个接口:BeanDefinitionRegistryPostProcessor,spring容器在这个阶段中会获取容器中所有类型为的bean,然后会调用他们的方法,源码如下,方法参数类型是,这个类型大家都比较熟悉,即bean定义注册器,内部提供了一些方法可以用来向容器中注册bean。这个接口还继承了接口,这个大家先不用关心,一会阶段2中会介绍。转载 2023-05-17 20:04:50 · 87 阅读 · 0 评论 -
Spring成神之路第二十八篇:Bean 循环依赖详解
这个很好理解,多个bean之间相互依赖,形成了一个闭环。比如:A依赖于B、B依赖于C、C依赖于A。B b;C c;A a;到目前为止,开头连环炮的问题,大家肯定都知道答案了,如果有不清楚的,欢迎留言。转载 2023-05-17 20:00:38 · 92 阅读 · 0 评论 -
Spring成神之路第二十七篇:spring 事件机制详解
继承了类/*** 用户注册成功事件//用户名/*** 创建用户注册成功事件对象* @param source 事件源* @param userName 当前注册的用户名*/转载 2023-05-17 19:59:04 · 125 阅读 · 0 评论 -
Spring成神之路第二十六篇:国际化详解
简单理解,就是对于不同的语言,做出不同的响应。比如页面中有个填写用户信息的表单,有个姓名的输入框浏览器中可以选择语言姓名:一个输入框Full name:一个输入框国际化就是做这个事情的,根据不同的语言显示不同的信息。所以需要支持国际化,得先知道选择的是哪种地区的哪种语言,java中使用来表示地区语言这个对象,内部包含了国家和语言的信息。转载 2023-05-17 19:58:00 · 122 阅读 · 0 评论 -
Spring成神之路第二十五篇:@Value【用法、数据来源、动态刷新】
本次面试过程中3个问题,我们都搞定了,希望你也已经掌握了,有问题的欢迎给我留言,交流!转载 2023-05-17 19:53:31 · 1219 阅读 · 0 评论 -
Spring成神之路第二十四篇:父子容器详解
创建spring容器的时候,可以给当前容器指定一个父容器。本文需掌握父子容器的用法,了解父子容器的特点:子容器可以访问父容器中bean,父容器无法访问子容器中的beanBeanFactory接口支持层次查找ListableBeanFactory接口不支持层次查找BeanFactoryUtils工具类中提供了一些非常实用的方法,比如支持bean层次查找的方法等等。转载 2023-05-17 19:48:51 · 143 阅读 · 0 评论 -
Spring成神之路第十九篇:@import 详解(bean 批量注册)
按模块的方式进行导入,需要哪个导入哪个,不需要的时候,直接修改一下总的配置类,调整一下@Import就可以了,非常方便。组件1:Module1Service1组件2:Module1Service2组件扫描类:CompontentScanModule1负责扫描当前模块中的组件/*** 模块1的主键扫描组件1:Module2Service1组件2:Module2Service2组件扫描类:CompontentScanModule1负责扫描当前模块中的组件/**转载 2023-05-08 15:31:15 · 304 阅读 · 0 评论 -
Spring成神之路第二十三篇:Bean 生命周期详解
API的方式Xml文件方式properties文件的方式注解的方式spring中提供了一个类,将xml中定义的bean解析为BeanDefinition对象,过程和xml的方式类似。来看案例代码。下面通过properties文件的方式实现上面xml方式定义的bean。来个properties文件:beans.propertiescar.name=奥迪car1.name=保时捷user.name=路人甲Java将bean properties文件解析为BeanDefinition对象/**转载 2023-05-19 21:08:34 · 169 阅读 · 0 评论 -
Spring成神之路第二十二篇:@Scope、@DependsOn、@ImportResource、@Lazy 详解
有些项目,前期可能采用xml的方式配置bean,后期可能想采用spring注解的方式来重构项目,但是有些老的模块可能还是xml的方式,spring为了方便在注解方式中兼容老的xml的方式,提供了@ImportResource注解来引入bean定义的配置文件。bean定义配置文件:目前我们主要介绍了xml的方式,还有一种properties文件的方式,以后我们会介绍,此时我们还是以引入bean xml来做说明。Class<?通常将其用在配置类上。转载 2023-05-08 15:47:54 · 306 阅读 · 0 评论 -
Spring成神之路第二十一篇:注解实现依赖注入(@Autowired、@Resource、@Primary、@Qulifier)
硬编码方式@Autowired、@Resource的方式@Bean标注的方法参数的方式这篇文中内容比较多,每个案例大家都要去敲一遍,不清楚的,可以留言,或者直接微信中@我需要掌握@Autowired注解和@Resource注解中候选者查找的过程@Autowired:先通过类型找,然后通过名称找@Resource:先通过名称找,然后通过类型找@Autowired和@Resource,建议开发中使用@Autowired来实现依赖注入,spring的注解用起来更名正言顺一些。转载 2023-05-08 15:46:57 · 418 阅读 · 0 评论 -
Spring成神之路第二十篇:@Conditional 通过条件来控制 bean 的注册
类中有下面任意注解之一的就属于配置类:类上有@Compontent注解类上有@Configuration注解类上有@CompontentScan注解类上有@Import注解类上有@ImportResource注解类中有@Bean标注的方法判断一个类是不是一个配置类,是否的是下面这个方法,有兴趣的可以看一下:spring中处理这2个过程会循环进行,直到完成所有配置类的解析及所有bean的注册。//环境(测试环境、开发环境、生产环境)//环境//@3。转载 2023-05-08 15:45:27 · 250 阅读 · 0 评论 -
Spring成神之路第十八篇:@ComponentScan、@ComponentScans 详解(bean 批量注册)
到目前为止,介绍了2种注册bean的方式:xml中bean元素的方式@Bean注解标注方法的方式通常情况下,项目中大部分类都需要交给spring去管理,按照上面这2种方式,代码量还是挺大的。为了更方便bean的注册,Spring提供了批量的方式注册bean,方便大量bean批量注册,spring中的@就是干这个事情的。转载 2023-05-08 15:29:43 · 300 阅读 · 0 评论 -
Spring成神之路第十七篇:@Configration 和@Bean 注解详解(bean 批量注册)
在类上使用注解通过容器来加注解修饰的类到目前为止加不加@Configuration注解,有什么区别,大家估计比我都清楚了@Configuration注解修饰的类,会被spring通过cglib做增强处理,通过cglib会生成一个代理对象,代理会拦截所有被@Bean注解修饰的方法,可以确保一些bean是单例的不管@Bean所在的类上是否有@Configuration注解,都可以将@Bean修饰的方法作为一个bean注册到spring容器中。转载 2023-05-08 15:15:14 · 211 阅读 · 0 评论