Spring系列
文章平均质量分 81
codingjav
骑马Coding
展开
-
mybatis源码解析 - mapper代理对象的生成
1、简单示例先看一个简单纯粹的mybatis demo(不集成spring等其他框架),代码结构很简单,如下图:完整代码地址:kingoe/boot-study;mapper层和我们平时说的dao层指的是同一个内容,都是数据库操作的封装,但是在没有集成mybatis时,dao层的接口都是需要我们手动去写其实现类,可在上图中我们却发现:我们并没有手动去实现PersonMapper接口,但工程却能实实在在的查询数据库,获取我们需要的数据,debug代码可以发现 PersonMapper实例是一个代.原创 2022-01-22 19:45:55 · 596 阅读 · 0 评论 -
Spring拓展接口之FactoryBean
1、是什么FactoryBean的源码比较简单,大家可以细读下其注释。/** * 实现此接口的bean不能用作普通bean。此bean暴露的对象是通过getObject()创建的对象,而不是它自身 */public interface FactoryBean<T> { /** * 返回此工厂管理的对象的实例(可能是共享的或独立的,取决于isSingleton()的返回值) */ @Nullable T getObject() thro原创 2022-01-22 14:35:54 · 378 阅读 · 0 评论 -
使用TargetSources
1.使用TargetSourcesSpring提供了TargetSource的概念,由org.springframework.aop.TargetSource接口进行描述。这个接口负责返回一个实现连接点的“目标对象(target object)”。每当AOP代理处理一个方法调用时都会向TargetSource的实现请求一个目标实例。使用Spring AOP的开发者通常不需要直接和TargetSource打交道,但这提供了一种强大的方式来支持池化(pooling),热交换(hot swappable.原创 2021-10-24 22:44:05 · 1127 阅读 · 0 评论 -
面试官:Spring代理目标bean时为何通过TargetSource类型对目标bean封装?
在Spring代理目标bean的时候,其并不是直接创建一个目标bean的对象实例的,而是通过一个TargetSource类型的对象将目标bean进行封装,Spring Aop获取目标对象始终是通过TargetSource.getTarget()方法进行的。本文首先会讲解Spring Aop是如何封装目标对象到TargetSource中的,然后会讲解TargetSource各个方法的使用原理,接着会对Spring提供的常见的TargetSource的实现类进行讲解,最后会讲解如何实现自定义的TargetSou原创 2021-10-24 22:33:40 · 398 阅读 · 0 评论 -
Spring AOP 功能使用详解
前言AOP 既熟悉又陌生,了解过 Spring 人的都知道 AOP 的概念,即面向切面编程,可以用来管理一些和主业务无关的周边业务,如日志记录,事务管理等;陌生是因为在工作中基本没有使用过,AOP 的相关概念也是云里雾里;最近在看 Spring 的相关源码,所以还是先来捋一捋 Spring 中 AOP 的一个用法。相关概念在学习 Spring AOP 的用法之前,先来看看 AOP 的相关概念,Spring AOP 的详细介绍,请参考官网 https://docs.spring.io/spr原创 2021-10-21 16:15:11 · 708 阅读 · 0 评论 -
Spring 事务使用详解
前言什么是事务?根据 维基百科事务 介绍,数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。简单来说,事务就是将一系列操作当成一个不可拆分的执行逻辑单元,这些要么都成功,要么都失败。事务具有4个属性:原子性、一致性、隔离性、持久性。称为ACID特性。Spring 事务在使用Spring进行开发过程中,一般都会使用Spring来进行事务的控制,接下来就来看下Spring使用事务的详细过程,包括事务的传播方式等。本文根据官方文档的介绍,...原创 2021-10-21 15:45:55 · 5657 阅读 · 1 评论 -
Spring 事务初始化源码分析
前言在上篇文章Spring 事务使用详解中详细介绍了Spring事务的使用过程,今天就来看下Spring事务是如何来实现,比如Spring事务在初始化的时候做了什么,Spring事务是如何进行事务的提交和回滚的;为了避免篇幅太长,所以分开两篇文章进行分析,这篇文章先来分析下Spring事务是如何初始化的,在初始化的时候做了什么。注册 InfrastructureAdvisorAutoProxyCreator我们知道,想要使用Spring事务,就得开启Spring的事...原创 2021-10-21 14:52:52 · 205 阅读 · 0 评论 -
Spring 事务提交回滚源码解析
前言在上篇文章Spring 事务初始化源码分析中分析了 Spring 事务初始化的一个过程,当初始化完成后,Spring 是如何去获取事务,当目标方法异常后,又是如何进行回滚的,又或是目标方法执行成功后,又是怎么提交的呢?此外,事务的提交和回滚由底层数据库进行控制,而 Spring 事务行为可以传播,这个传播方式由 Spring 来进行控制,它是怎么控制的呢?这篇文章就来分析下 Spring 事务提交回滚的源码。TransactionInterceptor还记得在 Spring 事务初始化...原创 2021-10-21 14:49:47 · 431 阅读 · 0 评论 -
使用FactoryBean定制实例化逻辑
对象实现org.springframework.beans.factory.FactoryBean接口,则成为它本身的工厂。FactoryBean接口是Spring IoC容器实例化逻辑的扩展点。假如初始化代码非常复杂,此时使用java编码比使用XML配置更容易表达。这种场景中,你可以创建自己的FactoryBean,在该类中编写复杂的初始化程序,然后将你的自定义FactoryBean插入到容器。FactoryBean接口提供了三种方法:Object getObject():返回此工厂创建的对象原创 2021-08-17 00:50:06 · 201 阅读 · 0 评论 -
Spring解决循环依赖
跳出源码地狱,Spring巧用三级缓存解决循环依赖-原理篇-Java知音概述使用两级缓存即可解决循环依赖问题,但是Spring还需要支持AOP,对象被AOP之后会生成一个新的对象,如果在将实例注入之后再进行AOP,那么两个地方的对象将不一致。因此使用三级缓存,将对象的AOP提前到实例化进行。三级缓存的过程尝试获取一个bean,发现bean不存在,于是实例化该bean,并放入三级缓存。 第二次尝试获取该bean,从三级缓存中找到bean,对该实例执行AOP,放入二级缓存并返回。 在初始.原创 2021-08-16 00:59:08 · 112 阅读 · 0 评论 -
Spring事务传播行为详解
前言:Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文对七种事务传播行为做详细介绍。基础概念:1. 什么是事务传播行为?事务传播行为用来描述由某一个事务原创 2021-08-02 00:42:16 · 124 阅读 · 0 评论 -
spring 事务管理之只读事务@Transactional(readOnly = true)
我们可以使用 @Transactional(readOnly = true) 来设置只读事务在将事务设置成只读后,当前只读事务就不能进行写的操作,否则报错。如下Cause: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed;需不需要在只有查询的方法上加上@Transactional注解?需要分为两种情况来看 若一个事务里只发出一条s原创 2021-08-01 17:12:24 · 17551 阅读 · 5 评论 -
spring事务管理中,用try-catch处理了异常,事务也会回滚?
在平时的开发中,如果在事物方法中用 try-catch处理了异常,那么spring aop不能捕获到异常信息,从而会导致spring不能对事务方法正确的进行管理,不能及时回滚错误信息。下面用代码演示一下:@Override @Transactional(rollbackFor = Exception.class) public int doSaveUser() throws Exception { int result = 0; UserEntity...原创 2021-08-01 16:06:52 · 6787 阅读 · 3 评论 -
Spring+EhCache缓存实例(详细讲解+源码下载)
一、ehcahe的介绍EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。转载 2016-07-07 23:35:30 · 831 阅读 · 0 评论 -
Spring知识点提炼
1. Spring框架的作用轻量:Spring是轻量级的,基本的版本大小为2MB控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。面向切面的编程AOP:Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。容器:Spring包含并管理应用中对象的生命周期和配置MVC框架: Spring-MVC事务管理:Spring提供一个持续转载 2016-07-07 23:41:05 · 549 阅读 · 0 评论 -
Connection is read-only问题的产生原因与解决方法
WARN [org.hibernate.util.JDBCExceptionReporter] -ERROR [org.hibernate.util.JDBCExceptionReporter] -org.hibernate.exception.GenericJDBCException: could not executeupdate query产生原因:一般如果报了这个错,估原创 2016-08-15 18:07:34 · 50742 阅读 · 0 评论 -
Maven+Mybatis+Spring+SpringMVC实现分页
一、项目搭建Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建二、分页插件的介绍博主采用的插件是PageHelper这个插件,使用起来十分方便。该插件支持以下数据库:OracleMysqlMariaDBSQLiteHsqldbPostgreSQLDB2SqlServer(2005+)InformixH2对应于githu原创 2016-09-22 18:10:32 · 2489 阅读 · 0 评论 -
hibernate4整合spring3.1出现java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider
hibernate4整合spring3.1的过程中,发现了Java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider异常,查了一下相关资料,原来发现hibernate4已经将hibernate3的一些功能改掉了,在hibernate4已经不使用CacheProvider了,所以做了以下修改,原先: class=原创 2016-10-12 00:43:53 · 754 阅读 · 0 评论 -
JeeSite 企业信息化快速开发平台
https://github.com/thinkgem/jeesite具体的请查看文档原创 2016-10-15 17:13:30 · 853 阅读 · 0 评论 -
调用feign请求超时 feign.RetryableException: Read timed out executing POST
aused by: java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(SocketInputStream.java) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)...原创 2018-04-11 20:23:02 · 20509 阅读 · 5 评论 -
Spring Boot:Exception parsing document: template="index", line 7 - column 3
最近这段时间在使用Spring Boot工程中访问静态html页面, 文件目录, -src/main/resources -templates -index.html -static -js -css 在写好HTML和css等后,浏览器访问,但是报错了, Whitelabel Error PageThis a...原创 2018-04-11 20:37:44 · 3713 阅读 · 2 评论 -
SpringBoot整合AOP + 自定义注解实现简单的权限验证
1、简介主要通过自定义注解,使用SpringAOP的环绕通知拦截请求,判断该方法是否有自定义注解,然后判断该用户是否有该权限,这里做的比较简单。2、项目搭建这里是基于SpringBoot的,对于SpringBoot项目的搭建就不说了。在项目中添加AOP的依赖:<!--AOP包--><dependency> <groupId>org....原创 2019-07-20 23:28:04 · 2841 阅读 · 5 评论