
Spring
文章平均质量分 92
春天的早晨
https://github.com/Allenmcc
展开
-
Spring AOP调用本类的事务方法失效
文章目录一、JDK动态代理1、实现方式2、反编译代理类的文件3、Proxy部分源码总结:问题一:本类中方法调用同类中方法会不会走代理?问题二:为什么必须要实现接口才能使用JDK动态代理?二、cglib动态代理1、实现方式2、代理类字节码编译核心问题:本类中调用本类自己的方法事务失效?1、对于JDK动态代理2、对于cglib动态代理首先要说明失效问题,必须要了解JDK动态代理和cglib动态代理的原理和调用方式。一、JDK动态代理1、实现方式理解JDK动态代理的实现原理:1.拿到被代理类的引用,并且转载 2022-05-04 21:48:11 · 3676 阅读 · 0 评论 -
spring事务(注解 @Transactional )失效的12种场景
文章目录一 、事务不生效【七种】1.访问权限问题 (只有public方法会生效)2. 方法用final修饰,不会生效3.同一个类中的方法直接内部调用,会导致事务失效3.1 新加一个Service方法3.2 在该Service类中注入自己3.3 通过AopContent类4.(类本身) 未被spring管理5.多线程调用6.(存储引擎)表不支持事务7.未开启事务二、事务不回滚【五种】1.错误的传播特性2.自己吞了异常3.手动抛了别的异常4.自定义了回滚异常5.嵌套事务回滚多了三、大事务与编程式事务1. 大事务转载 2022-05-04 15:57:04 · 35948 阅读 · 9 评论 -
Spring @Transactional 事务机制
文章目录工作原理常见问题@Transactional不生效的情况遇到检测异常时,事务默认不回滚在业务层捕捉异常后,发现事务不生效工作原理运行配置@Transactional注解的测试类的时候,具体会发生如下步骤1)事务开始时,通过AOP机制,生成一个代理connection对象,并将其放入DataSource实例的某个与DataSourceTransactionManager相关的某处容器中。在接下来的整个事务中,客户代码都应该使用该connection连接数据库,执行所有数据库命令[不使用该conn转载 2021-05-24 20:47:24 · 387 阅读 · 0 评论 -
Spring事务传播机制
文章目录1. REQUIRED2. SUPPORTS3. MANDATORY4. REQUIRES_NEW5. NOT_SUPPORTED6. NEVER7. NESTEDSpring管理的事务是逻辑事务,而且物理事务和逻辑事务最大差别就在于事务传播行为,事务传播行为用于指定在多个事务方法间调用时,事务是如何在这些方法间传播的。下面以a.save()里调用了b.save()举例,事务方法之间调用时事务如何传播。@Servicepublic class A { @Autowired privat转载 2021-05-24 16:56:55 · 7537 阅读 · 1 评论 -
Spring Boot 自动配置原理
文章目录原理Spring Boot的配置文件工作原理剖析@EnableAutoConfiguration自动配置生效总结原理Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文转载 2021-05-19 11:43:19 · 170 阅读 · 0 评论 -
Spring Boot Starters启动器
文章目录Starters是什么?Starters命名Starters分类1. Spring Boot应用类启动器2. Spring Boot生产启动器3. Spring Boot技术类启动器Starters是什么?Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。Starters转载 2021-05-07 09:55:27 · 550 阅读 · 0 评论 -
Spring循环依赖及解决方式
文章目录1. 什么是循环依赖?2. 怎么检测是否存在循环依赖3. Spring怎么解决循环依赖4.基于构造器的循环依赖5.基于setter属性的循环依赖6.结束语1. 什么是循环依赖?循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。Spring中循环依赖场景有:(1)构造器的循环依赖(2)field属性的循环依赖转载 2021-05-04 18:28:47 · 758 阅读 · 0 评论 -
Spring中Bean的生命周期
文章目录1. 实例化Bean2. 设置对象属性(依赖注入)3. 注入Aware接口4. BeanPostProcessor5. InitializingBean与init-method6. DisposableBean和destroy-method7.各种接口方法分类对于普通的Java对象,当new的时候创建对象,当它没有任何引用的时候被垃圾回收机制回收。而由Spring IoC容器托管的对象,它们的生命周期完全由容器控制。Spring中每个Bean的生命周期如下:1. 实例化Bean对于BeanF转载 2021-04-17 22:04:43 · 232 阅读 · 0 评论 -
《Spring AOP面向切面编程》(下)
文章目录3.Spring AOP的实现原理3.2 链式调用#3.2.1 职责链模式3.2.1.1 V13.2.1.2 V23.2.2 Spring内部实现1)拦截器链是如何生成的2)拦截器链是如何链式调用的3)Spring使用职责链模式实现拦截器链链式调用3.Spring AOP的实现原理3.2 链式调用多个AOP 切面是如何叠加起作用的?public class Proxy implem...原创 2019-06-23 21:26:55 · 230 阅读 · 0 评论 -
Java-JDK动态代理实现原理
文章目录JDK动态代理使用实例JDK动态代理实现原理分析Proxy.newProxyInstance()getProxyClass0()ProxyClassFactory.apply()ProxyGenerator.generateProxyClass()生成的代理对象的.class文件JDK动态代理使用实例代理模式的类图如上。关于静态代理的示例网上有很多,在这里就不讲了。因为本篇讲述要点...原创 2019-06-23 21:16:16 · 429 阅读 · 0 评论 -
《Spring AOP面向切面编程》(上)
文章目录1.AOP概览2.Spring AOP的使用举例PointCut切入点Advice通知3.Spring AOP的实现原理3.1运行时织入3.1.1代理模式3.1.2 JDK动态代理3.1.3 cglib动态代理3.1.4 Spring如何创建代理beanProxyFactoryBean的getObject()方法getSingletonInstance()方法createAopProxy(...原创 2019-06-23 11:56:05 · 175 阅读 · 0 评论 -
静态代理和动态代理
文章目录什么是代理静态代理动态代理第一步:生成TimeProxy源码第二步:编译TimeProxy源码第三步:加载到内存中并创建对象第四步:增加InvocationHandler接口测试代码生成的TimeProxy.java源码MyInvocationHandler.java如何使用JDK实现揭秘Proxy.javaInvocationHandler答疑解惑invoke方法的第一个参数proxy到...转载 2019-03-17 21:19:43 · 252 阅读 · 0 评论 -
Spring IOC和DI的理解
文章目录分享Iteye的开涛对Ioc的精彩讲解IoC是什么IoC能做什么分享Bromon的blog上对IoC与DI浅显易懂的讲解IoC(控制反转)DI(依赖注入)我对IoC(控制反转)和DI(依赖注入)的理解分享Iteye的开涛对Ioc的精彩讲解IoC是什么Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计...转载 2019-02-23 17:35:14 · 663 阅读 · 0 评论 -
HttpServletRequest中读取HTTP请求的body
背景Spring MVC 等框架用久了之后,发现对于POST请求里面如果不使用@RequestBody 好像很难获得POST的body。HTTP请求中的是字符串数据字符串读取void charReader(HttpServletRequest request) { BufferedReader br = request.getReader(); String str, wholeStr转载 2017-09-17 21:33:49 · 60168 阅读 · 2 评论 -
<mvc:annotation-driven/>
AnnotationDrivenBeanDefinitionParser通常如果我们希望通过注解的方式来进行SpringMVC开发,我们都会在*-servlet.xml中加入标签来告诉spring我们的目的。但是我们为什么这么做呢?这个标签是什么意思呢?它做了什么呢?同样为了弄清楚这些问题, 像标签一样,我们先找到它的解析类。第一篇文章中说过了,所有的自定义命名空间(像mvc,contex转载 2017-08-06 20:59:06 · 4141 阅读 · 0 评论 -
Spring AOP 及动态代理和静态代理区别
AOP是Aspect Oriented Programing的简称,面向切面编程。AOP适合于那些具有横切逻辑的应用:如性能监测,访问控制,事务管理、缓存、对象池管理以及日志记录。AOP将这些分散在各个业务逻辑中的代码通过横向切割的方式抽取到一个独立的模块中。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框原创 2017-06-04 16:51:37 · 2475 阅读 · 0 评论 -
struts.xml配置文件(package,namespace,action)
struts2.0 xml配置struts.xml文件是整个Struts2框架的核心。 struts.xml文件内定义了Struts2的系列Action,定义Action时,指定该Action的实现类,并定义该Action处理结果与视图资源之间的映射关系。 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD S转载 2017-02-20 10:00:44 · 655 阅读 · 0 评论 -
web容器启动spring容器
spring容器是如何在web应用中得到应用的,web容器又是如何以及何时启动spring容器的呢?web.xml中配置 <!---①从类路径下加载spring配置文件-> <context-param> <param-name>contextConfigLocation</param-name> <param-value> clas转载 2016-10-15 13:11:30 · 1258 阅读 · 0 评论 -
Spring组件扫描 <context:component-scan/>
我们在SpringMVC开发项目中,有的用注解和XML配置Bean,这两种都各有自己的优势,数据源配置比较经常用XML配置,控制层依赖的service比较经常用注解等(在部署时比较不会改变的),我们经常比较常用的注解有@Component是通用标注,@Controller标注web控制器,@Service标注Servicec层的服务,@Respository标注DAO层的数据访问。SpringMVC转载 2016-10-16 16:19:28 · 3345 阅读 · 0 评论 -
Spring scope属性详解
scope用来声明IOC容器中的对象应该处的限定场景或者说该对象的存活空间,即在IOC容器在 对象进入相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象。打个比方吧!我们都是处在社会 (容器)中,如果把中学教师作为一个类定义,那么当容器初始化这些类之后,中学教师只能局限在中学这个场景中,中学,就可以看做中学教师的scope。Spring容器最初转载 2016-10-29 10:58:06 · 470 阅读 · 0 评论 -
Spring MVC之@RequestMapping 详解
简介@RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。六个属性RequestMapping注解有六个属性,下面我们把她分成三类进行说明。 1. value, method; value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会转载 2016-11-28 22:30:03 · 360 阅读 · 0 评论 -
Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
简介handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型) A、处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解: @PathVariable; B、处理request header部分的注解: @RequestHeader, @CookieVa转载 2016-11-28 22:47:57 · 681 阅读 · 0 评论 -
Spring MVC之@RequestBody, @ResponseBody 详解
@RequestBody作用i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上; ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。使用时机A) GET、POST方式提时, 根据request header Conten转载 2016-11-29 21:31:53 · 752 阅读 · 0 评论 -
Spring 请求重定向urlrewritefilter
访问请求localhost:8080/menus跳转到localhost:8080/menus/home 依赖的jar包 <dependency> <groupId>org.tuckey</groupId> <artifactId>urlrewritefilter</artifactId> <version>4.0.4</version> </dependency>配置在原创 2016-12-29 23:08:43 · 1639 阅读 · 0 评论 -
struts2 package name
首先更正一点,struts配置文件中的package name属性不是解决重名问题的,而是用来实现继承的,namespace才是用来解决重名的,前台和后台可以这样分<package name="front" namespace="/front" extends="default"> <package name="back" namespace="/back" extends="default">这转载 2017-01-16 20:36:38 · 1261 阅读 · 0 评论 -
Spring log4j配置详解
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。LoggerLoggers组件被分为五个级别:DEBUG INFO WARN ERROR FATAL 各个级别的顺序是这样那个的转载 2017-01-12 14:42:59 · 7194 阅读 · 0 评论 -
Spring @Resource、@Autowired、@Qualifier的注解注入及区别
spring2.5提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖。在Java代码中可以使用 @Resource或者@Autowired注解方式来经行注入。虽然@Resource和@Autowired都可以来完成注入依赖,但它们之间是有区 别的。首先来看一下: a。@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会转载 2017-02-19 10:05:22 · 4171 阅读 · 0 评论 -
CDATA标记的作用
所有 XML 文档中的文本均会被解析器解析,比如’& nbsp;’将不像其他地方那样被转换成空格。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。CDATA术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。 在 XML 元素中,”<” 和 “&” 是非法的。 “<” 会产生错误,因为解析器会把该字符解释原创 2017-02-11 12:17:58 · 5738 阅读 · 0 评论 -
maven dependency中scope=compile 和 provided区别
问题再现上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是provided的情况,比如如下:<dependency> <groupId>com.liferay.portal</groupId> <artifactId>portal-impl</artifactId> <version>6.1.0</version> <scope转载 2017-03-09 16:18:20 · 77787 阅读 · 0 评论 -
spring AspectJ的Execution表达式
在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut”切入点”例如定义切入点表达式 execution (* com.sample.service.impl..*.*(..))execution()是最常用的切点函数,其语法如下所示:整个表达式可以分为五个部分:execution(): 表达式主体。第一个号:表示返回类型,号转载 2017-03-12 20:10:44 · 344 阅读 · 0 评论 -
Spring 实现定时作业
定时批处理作业job是J2EE企业应用里很重要的一环,用来在晚间进行财务挂账,数据转存,计算任务等等操作。xml配置<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001转载 2016-09-23 17:52:33 · 1058 阅读 · 0 评论