Spring
轻尘×
一念起,千山万水;一念灭,沧海桑田;生活,或许本该就有诸多遗憾;那些情,已散落天涯,那些未说完的话、未叙完的故事,终将被流年吹散
展开
-
实现了Spring的Aware接口的自定义类什么时候执行的?
以如下代码为例,自定义类MyAware实现了BeanFactroryAware,希望在MyAware中攀上BeanFactory这个亲戚,那spring是什么时候给我beanFactory的呢?在创建每一个bean时,都会执行一下这个invokeAwareMethods,这段代码的逻辑很简单,就是判断当前的bean是否是Aware类型的,如果是,具体是哪种。了解到用户可以通过实现相应的Aware接口来获取spring框架提供的能力,俗称“攀亲戚”我们通过debug堆栈信息就能看出。原创 2022-12-01 18:27:15 · 871 阅读 · 0 评论 -
Spring中@Autowired注解装配流程
众所周知,Autowired注解是通过AutowiredAnnotationBeanPostProcessor来解析的第一个问题AutowiredAnnotationBeanPostProcessor在哪里注册的?过程比较复杂,在使用xml和注解不同的场景中,略有不同,具体可以参考如下文章:xml开发方式下AutowiredAnnotationBeanPostProcessor的注册时机https://blog.csdn.net/leisure_life/article/details/125570942?原创 2022-07-02 16:31:09 · 880 阅读 · 0 评论 -
注解开发方式下AutowiredAnnotationBeanPostProcessor的注册时机
写一个测试方法,new的是AnnotationConfigApplicationContext ,指定basePackages进this()里面会new一个AnnotatedBeanDefinitionReader new AnnotatedBeanDefinitionReader()的过程中,有一行与众不同的代码继续跟进 正是在这个方法内,把AutowiredAnnotationBeanPostProcessor的注册到了Set中 在使用xml方式...原创 2022-07-02 13:54:36 · 301 阅读 · 0 评论 -
xml开发方式下AutowiredAnnotationBeanPostProcessor的注册时机
AutowiredAnnotationBeanPostProcessor是实现@Autowired的关键,它本身是在何时添加到sping容器中的?在使用xml方式开发的过程中,我们程序入口一般是ClassPathXmlApplicationContext创建ClassPathXmlApplicationContext时,会调用this构造函数 在构造函数中调用父类构造函数,完成一些属性的加载,以及配置文件路径的解析工作,然后进入正题——refresh() 在核心的refresh()方法中,有一个步骤是原创 2022-07-02 13:43:38 · 342 阅读 · 0 评论 -
springboot中内置tomcat什么时候创建的,又是什么时候启动的?
与spring和springboot相关的重要逻辑,如果想了解源头在哪,找refresh准没错启动类,run一路run直到refreshContext(context) 走到ServletWebServerApplicationContext#refresh()其实调用还是super.refresh(),也就是AbstractApplicationContext的refresh,再调用onRefresh()然后又回调回了ServletWebServerApplic原创 2022-06-29 08:56:31 · 480 阅读 · 0 评论 -
SpringBoot中spring.factories在哪里被加载的
Spring 自 3.2 引入 spring.factories SPI 后并没有真正的利用起来,使用的地方比较少,然而真正把 spring.factories 发扬光大的是在 Spring Boot 中 那在springboot中,spring.factories什么时候被加载的呢,里面的类又是什么时候被实例化的呢?从一个普通的springboot项目的main方法进去 就是这里,一个读取里面的类全限定性类名,然后进行实例化。 循环遍历,逐一初始化,用的是java的反射机制反射, forName..原创 2022-06-27 13:43:29 · 1089 阅读 · 0 评论 -
AutowiredAnnotationBeanPostProcessor什么时候被实例化的?
AutowiredAnnotationBeanPostProcessor是spring实现自动装配的基石,根据前文《 internalAutowiredAnnotationProcessor在哪冒出来的?》,我们已经知道了AutowiredAnnotationBeanPostProcessor是什么时候被加入BeanDefinition,那它又是在哪个步骤被实例化的呢?把断点打在 refresh()方法的invokeBeanFactoryPostProcessors处我们可以看看invokeBeanFact原创 2022-06-25 17:29:21 · 515 阅读 · 0 评论 -
Spring的Aware接口有什么用?
ioc容器里面的对象分两种,一种是用户自定义对象,一种是容器对象Aware 接口可以理解为用来获取某些容器对象的方法例如一个普通的Bean对象,需要用到BeanFactory,可以这样做@Componentpublic class MyAware implements BeanFactoryAware { BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory)原创 2022-05-17 15:12:17 · 3613 阅读 · 0 评论 -
代码验证REQUIRES_NEW事务传播机制
REQUIRES_NEW 传播行为下,内外事务是独立的,互不干扰原创 2022-04-28 17:45:34 · 1202 阅读 · 0 评论 -
spring 事务传播机制总结
spring事务的传播机制定义在 TransactionDefinition 接口中,定义了如下传播类型PROPAGATION_REQUIRED支持当前事务,如果没有当前事务就创建一个新的事务,是默认的传播行为。外围方法未开启事务内部会创建新事务,若新事务回滚,不影响外围方法。外围方法开启事务内部方法会加入到外围方法的事务中,使用同一个事务,不管内外谁发生异常,整个事务都将回滚。/** * Support a current transaction; create a原创 2022-04-28 15:20:52 · 651 阅读 · 0 评论 -
Spring @Transactional注解失效场景重现
环境jdk1.8 + springboot 2.1.0.RELEASE+mysql 8 innerDB存储引擎正常在数据插入一条数据抛出checked异常 @Transactional public ApiResult updateUser(@RequestBody UserParams user) throws Exception { SysUser sysUser = new SysUser(); sysUser.se..原创 2022-04-15 17:02:07 · 956 阅读 · 0 评论 -
springboot 自定义注解+拦截器+Redis实现限流,防止恶意刷接口实践
自定义注解,具体频次,根据具体场景设置import java.lang.annotation.*;@Inherited@Documented@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)/** * 限流注解 */public @interface AccessLimit { //标识 指定sec时间段内的访问次数限制原创 2021-11-18 11:39:29 · 991 阅读 · 0 评论 -
Spring AOP-通知-前置通知
AOP-通知-前置通知所需jarcom.springsource.org.aopalliance-1.0.0.jaraop联盟jar原创 2017-04-06 09:39:12 · 1473 阅读 · 0 评论 -
Spring AOP-有接口的CGLIB动态代理
AOP-有接口的CGLIB动态代理Spring底层实现代理时,如果代理对象有接口,默认选择的是JDK的动态代理来实现;而当代理对象没有接口时,默认选择的是CGLib代理来实现。 目标对象有接口 目标对象无接口 目标对象有接口设置CGLib动态代理<!-- 手动设置代理模式(含接口默认为JDK动态代理,改为CGLib动态代理) --> <property name="proxyT原创 2017-04-06 15:42:29 · 553 阅读 · 0 评论 -
Spring AOP-通知-为目标方法织入多个切面
AOP-通知-为目标方法织入多个切面开发中可能会遇到为目标方法织入多个切面,比如前置。后置通知都需要原创 2017-04-06 15:20:37 · 2938 阅读 · 0 评论 -
SSH整合jar包总结
SSH整合jar包汇总Struts2版本:struts-2.3.31 Spring版本:spring-framework-4.2.1.RELEASE-dist Hibernate版本:hibernate-release-5.0.1.Final 以上框架下载方式在历史博文均有 Mysql版本:6.0 (64位) 整合jar共计49个 Struts2共16个Struts2基本jar有13个原创 2017-04-14 17:20:22 · 5255 阅读 · 2 评论 -
Spring-AOP-通知-异常通知
AOP-通知-异常通知顾名思义,目标方法发生异常植入的切面 异常通知类需要实现ThrowsAdvice接口,你会发现ThrowsAdvice没有需要实现的方法 在源码中有猫腻* <pre class="code">public void afterThrowing(Exception ex)</pre>* <pre class="code">public void afterThrowing(原创 2017-04-06 11:02:07 · 1168 阅读 · 0 评论 -
No bean named 'MysessionFactory' is defined
No bean named ‘MysessionFactory’ is definedHTTP Status 500 - No bean named 'MysessionFactory' is definedtype Exception reportmessage No bean named 'MysessionFactory' is defineddescription The原创 2017-04-19 09:04:41 · 4305 阅读 · 0 评论 -
Spring-AOP-通知-环绕通知
aop环绕通知工程用到的jar包:http://pan.baidu.com/s/1dFFw6at原创 2017-04-06 10:37:30 · 3202 阅读 · 0 评论 -
Spring AOP-通知-后置通知
AOP-通知-后置通知原创 2017-04-06 09:57:26 · 633 阅读 · 0 评论 -
AOP-顾问-方法名匹配切入点顾问
Spring AOP-顾问-方法名匹配切入点顾问 因为通知给目标对象的所有方法都切入,而实际应用往往是需要对指定方法进行增强,这就需要用到顾问来实现。 在通知的基础之上修改配置文件即可<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http:/原创 2017-04-06 16:57:42 · 426 阅读 · 0 评论 -
Spring AOP-顾问-正则表达式方法切入点顾问
AOP-顾问-正则表达式方法切入点顾问 也是在通知的基础之上修改配置文件原创 2017-04-06 17:14:38 · 1556 阅读 · 0 评论 -
基于XML的DI-byName方式的域属性自动注入
Spring基于XML的DI-byName方式的域属性自动注入原创 2017-03-29 14:37:21 · 529 阅读 · 0 评论 -
MyBatis与Spring整合
整合背景 稍微大一点的项目都会使用SSM或者SSH框架,但是如果项目不是那么的大,用MyBatis和Spring就足够了,MyBatis的优势就是sql灵活,可以适应多变的需求;使用spring可以降低各模块之间的耦合度,方便系统的升级与维护。 整合思路 需要spring通过单例的方式管理SqlSessionFactory spring和mybatis整合生成代理对象,使用SqlSessio原创 2017-05-27 12:00:23 · 533 阅读 · 0 评论 -
AspectJ-基于注解的实现-切入点的定义
切入点的定义减少切入点定义的冗余原创 2017-04-06 21:46:40 · 1537 阅读 · 0 评论 -
AspectJ 基于注解的实现各种通知
接口package com.hk.spring.annotation;public interface ISomeService { public void doFirst(); public void doSecond(); public String doThird();}实现接口package com.hk.spring.annotation;public class原创 2017-04-06 21:35:16 · 1170 阅读 · 0 评论 -
AspectJ 基于注解的实现前置通知
Spring环境下AspectJ 基于注解的实现前置通知原创 2017-04-06 20:52:34 · 693 阅读 · 0 评论 -
基于Spring环境的AspectJ开发环境搭建
基于Spring环境的AspectJ开发环境搭建 AspectJ是专门针对AOP问题的,所以其运行是需要AOP环境的,即需要之前的AOP的两个Jar包。另外,还需要AspectJ自身的Jar包一、导入jar包所需jar已经保存在百度云盘上了:http://pan.baidu.com/s/1jISd9vK二、引入AOP约束在配置文件头部,要引入关于aop的约束。在Spring框架的解压目录中,\do原创 2017-04-06 20:15:11 · 297 阅读 · 0 评论 -
AOP-自动代理生成器-Bean名称自动代理生成器
Spring AOP-自动代理生成器-Bean名称自动代理生成器原创 2017-04-06 19:31:18 · 585 阅读 · 0 评论 -
AOP-自动代理生成器-默认Advisor自动代理生成器
AOP-自动代理生成器-默认Advisor自动代理生成器 当有多个目标对象时,生成代理会很繁杂,为了简单采用自动代理生成器配置文件<原创 2017-04-06 17:48:41 · 730 阅读 · 0 评论 -
could not initialize proxy - no Session
could not initialize proxy - no Session你是不是已经配置了openSessionInView还报这个错,不是,那还不去配置!!!!是的,因为你配置的位置不对,由于过滤器的先进先出原则,你应该把Spring 的相关配置配在Struts2前面<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http原创 2017-04-18 19:41:43 · 398 阅读 · 0 评论 -
javassist_0 cannot be cast to javassist.util.proxy.Proxy
javassist_0 cannot be cast to javassist.util.proxy.Proxyjavassist_0 cannot be cast to javassist.util.proxy.Proxycom.hk.beans.Student_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy原创 2017-04-18 19:29:56 · 2445 阅读 · 0 评论 -
Spring在Web项目中的应用-添加ServletContext监听器
添加ServletContext监听器原创 2017-04-14 15:05:02 · 737 阅读 · 0 评论 -
基于XML的DI-为Spring配置多个子配置文件——平等关系
基于XML的DI-为Spring配置多个子配置文件——平等关系随着项目开发的推进,Spring配置文件越来越庞大,维护性越来越差,为了解决这个问题,可以把配置文件成多个子配置文件,你可以安照属性分,也可以按照模块分;多个子配置文件的加载原创 2017-03-29 20:42:20 · 340 阅读 · 0 评论 -
基于XML的DI-异类抽象Bean
Spring基于XML的DI-异类抽象Bean看一段配置不同类但有共同属性原创 2017-03-29 18:20:16 · 311 阅读 · 0 评论 -
基于XML的DI-同类抽象Bean
同类抽象bean就是抽取bean的共性原创 2017-03-29 18:00:34 · 259 阅读 · 0 评论 -
基于XML的DI-内部匿名Bean
匿名bean,就是没有名称(id)的bean,不能被其他bean用名称获取到,只能通过autowire=”byType”方式获取;如果有某个类,不想被其他类通过任何方式获取,只为某个类提供服务,则需要采用内部匿名类原创 2017-03-29 17:36:52 · 498 阅读 · 0 评论 -
基于XML的DI-匿名Bean
匿名bean,就是没有名称(id)的bean,不能被其他bean用名称获取到,只能通过autowire="byType"方式获取原创 2017-03-29 17:32:22 · 294 阅读 · 0 评论 -
Spring基于XML的DI-使用SPEL注入
Spring基于XML的DI-使用SPEL注入 SpEL,Spring Expression Language,即Spring EL表达式语言。在Spring配置文件中为Bean的属性注入值时,可直接使用SpEL表达式计算的结果。SpEl表达式一#开头,后跟一对大括号<bean id="hello" value="#{……}"> 其配置方法在spring-framework-4.2.1.RELE原创 2017-03-29 17:23:06 · 503 阅读 · 0 评论 -
基于XML的DI-byType方式的域属性自动注入
Spring基于XML的DI-byType方式的域属性自动注入原创 2017-03-29 14:50:08 · 445 阅读 · 0 评论