
Spring整理后
文章平均质量分 75
主要讲Spring使用、功能介绍、源码分析
信仰_273993243
热爱技术热爱生活,希望大家共同进步
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring注解@ImportResource使用
ImportResource 注解:用于导入Spring的配置文件,注意这个文件里面的内容最终会以DB的方式添加到Spring集合中。Spring在默认是加载application.xml,但是如果我们希望额外的加载我们自定的xml就可以通过@ImportResource,例如。备注:@ImportResource和@Import处理上还是有很多区别的,不要搞混了。原创 2023-10-12 14:48:05 · 327 阅读 · 0 评论 -
Spring AOP创建代理的方式ProxyFactoryBean、ProxyFactory、AspectJProxyFactory
这三个类本身没有什么关系,但都继承自:ProxyCreatorSupport,创建代理对象的核心逻辑都是在ProxyCreatorSupport中实现的AspectJProxyFactory,ProxyFactoryBean,ProxyFactory 大体逻辑都是:1、填充AdvisedSupport的,然后交给父类ProxyCreatorSupport得到JDK或者CGLIB的AopProxy2、代理调用时候被intercept方法拦截,这个拦截操作都是在JDK代理和Cglib代理生成时设置好的。转载 2023-10-15 15:18:06 · 658 阅读 · 0 评论 -
SpringAOP-代理对象调用拦截器
代理对象创建好后,其实最终的拦截工作都是交给了MethodInvocation来做的,MethodInvocation有2个重要实现类ReflectiveMethodInvocation、CglibMethodInvocation1、JDK代理对象的拦截器链创建交给:ReflectiveMethodInvocation。原创 2023-10-15 14:46:14 · 265 阅读 · 0 评论 -
Spring中PointcutAdvisor和IntroductionAdvisor梳理
Advisor是SpringAOP的顶层抽象,用来管理Advice和PointcutSpring中有五种增强:BeforeAdvide(前置增强)、AfterAdvice(后置增强)、RoundAdvice(环绕增强)、ThrowsAdvice(异常增强)、IntroductionAdvice(引介增强)。前面4种大家比较熟悉,引介增强我下面会单独说。主要表达目标类或者目标方法Advisor是继承体系主要有和,PointcutAdvisor与IntroductionAdvisor最本质上的区别就是。原创 2023-10-13 21:54:37 · 1174 阅读 · 0 评论 -
Spring-事务源码解析2
1、前面我们在Bean的实例化时,用到了第一个组件InfrastructureAdvisorAutoProxyCreator,用来触发wrapIfNecessary方法。原创 2023-10-12 16:17:25 · 221 阅读 · 0 评论 -
Spring-事务源码解析1
一、使用先说下使用,在SpringBoot启动类上加注解,表示开启声明式事务@EnableTransactionManagement然后在Service方法上加@Transactional二、实现逻辑看下注解EnableTransactionManagement的源码@Import(TransactionManagementConfigurationSelector.class)public @interface EnableTransactionManagement {原创 2022-04-28 11:54:48 · 972 阅读 · 0 评论 -
Spring-populateBean属性填充
属性填充走AutowiredAnnotationBeanPostProcessor后置处理器。原创 2023-10-12 11:54:57 · 114 阅读 · 0 评论 -
Spring-源码-三级缓存面试题
下面说Spring的三级缓存// 从上至下 分表代表这“三级缓存”private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); //一级缓存private final Map<String, Object> earlySingletonObjects = new HashMap<>(16); // 二级缓存private final Map<S原创 2022-05-01 18:22:27 · 1083 阅读 · 0 评论 -
Spring三级缓存流程再梳理
本文主要是说下在使用spring时遇到了循环依赖,Spring利用三级缓存怎么解决备注:singletonFactory.getObject和Bean的初始化都会经过AOP来判断一次是否需要创建代理对象,但是二者只会有一个创建代理对象,他们里面利用了一个中间earlyProxyReferences缓存,创建过就不会再创建了,这个缓存不是三级缓存别搞混了。原创 2023-10-12 10:49:59 · 328 阅读 · 0 评论 -
Spring-源码-doCreateBean方法解读
一、先看下代码大致结构protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args) throws BeanCreationException { BeanWrapper instanceWrapper = null; // 步骤1 if (mbd.isSingleton()) { instanceWrapper = this.factoryBea原创 2022-05-01 17:52:53 · 1182 阅读 · 0 评论 -
Spring-源码-三级缓存、循环依赖问题
三、下面看下普通Bean循环依赖,怎么解决案例:A依赖B,B依赖A1、A先实例化,同时把A放到三级缓存中,在初始化A对象里面的属性,发现有依赖B2、创建实例B, 再把B放到三级缓存中,发现B有依赖A,执行初始化属性也就是populateBean方法,里面会调用getSingleton方法Object sharedInstance = getSingleton(beanName);protected Object getSingleton(String beanName, boolean allo原创 2022-05-01 14:43:44 · 535 阅读 · 0 评论 -
Cglib代理和JDK代理原理的区别
Jdk动态代理,拿到目标类所继承的接口,生成代理类,并且代理类也会实现和目标类一样的接口。原创 2023-09-14 20:01:47 · 177 阅读 · 0 评论 -
springboot-启动器作用及自定义启动器
为什么需要启动器,启动器的优点,以及如何自定义启动器原创 2022-06-12 16:50:41 · 1642 阅读 · 0 评论 -
Spring-@Import介绍
ImportBeanDefinitionRegistrar、importCandidates、@Import原创 2023-09-20 15:56:53 · 338 阅读 · 0 评论 -
Spring-ImportSelector接口功能介绍
ImportSelector接口是至spring中导入内部类或者外部类的核心接口,只需要其定义的方法内返回需要创建bean的class字符串就好了,比如:当我们引入一个外部share包,我们拿到里面的Class返回出去,就能得到这个bean,是多么神奇的事情,前提是这个类不是接口哦。ImportSelector往往结合@Import注解一起使用,可以参考我的这篇文章。原创 2023-09-20 16:10:28 · 903 阅读 · 0 评论 -
Spring-ImportBeanDefinitionRegistrar接口介绍
ImportBeanDefinitionRegistrar原创 2023-09-20 07:56:45 · 3319 阅读 · 2 评论 -
spring-FactoryBean的作用和使用场景,以及和BeanFactory的区别
BeanFactory和FactoryBean的区别、FactoryBean的作用转载 2022-06-29 23:57:17 · 9185 阅读 · 0 评论 -
Spring-源码-实例化-AOP原理
学习本文1、被切面拦截的目标类是如何实例化2、都知道AOP是基于JDK动态代理或者Cglib,那么原理是怎么实现的一、使用案例先定义一个service方法public interface UserService { void addUser();}@Servicepublic class UserServiceImpl implements UserService { @Override public void addUser() { System.原创 2022-04-25 19:13:02 · 837 阅读 · 0 评论 -
Spring-源码-实例化-如何处理@Autowired
本篇文章你可以学到1、Spring如何找到带有@Autowired注解的属性字段和带有@Autowired注解的方法,2、Spring如何通过@Autowired给属性赋值,如何调用@Autowired注解的方法先看下创建doCreateBean的方法Object beanInstance = doCreateBean(beanName, mbdToUse, args);protected Object doCreateBean(final String beanName, final Root原创 2022-04-12 16:42:21 · 610 阅读 · 0 评论 -
Spring-源码-如何处理@Autowired、@Resource注解及区别
疑问:String如何处理带有@Autowired的方法或者带有@Autowired的属性在Spring初始化的过程中有个填充属性的操作,这里就包含依赖注入,也就会@Autowired注解,下面这行代码就是主要入口//BeanWrapper instanceWrapper = xxx//RootBeanDefinition mbd = xxpopulateBean(beanName, mbd, instanceWrapper);//BeanWrapper是什么?因为此时Bean已经实例化,但是没有原创 2022-04-10 16:32:06 · 441 阅读 · 0 评论 -
AnnotationConfigApplicationContext->this()->AnnotationConfigApplicationContext
public AnnotationConfigApplicationContext() { //注册一个读取器 this.reader = new AnnotatedBeanDefinitionReader(this); //创建一个扫描器 this.scanner = new ClassPathBeanDefinitionScanner(this);}看下AnnotatedBeanDefinitionReader代码逻辑this.reader = new AnnotatedBeanDefi原创 2022-03-17 00:31:54 · 486 阅读 · 0 评论 -
spring-BeanDefinitionRegistryPostProcessor、BeanFactoryPostProcessor、BeanPostProcessor三者区别
BeanDefinitionRegistryPostProcessor唯一方法:BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry作用:所有常规bd已经加载完毕,然后可以再添加一些额外的bd。执行顺序:三个中最先执行的spring定义的BeanDefinitionRegistryPostProcessorConfigurationClassPostProcessor 处理@Configuration注解.原创 2022-03-16 22:51:20 · 2203 阅读 · 0 评论 -
spring-refresh-prepareBeanFactory
为BeanFactory做一些准备工作1.设置beanFactory 的类加载器;2.设置EL表达式解析器(Bean创建完成填充属性时使用)和属性注册解析器3.添加BeanPostProcessor4.设置各种Aware接口的实现类为忽略自动装配5.设置自动装配的类(BeanFactory,ResourceLoader,ApplicationEventPublisher,ApplicationContext)6.如果BeanFactory中存在loadTimeWeaver的bean,那么需要添原创 2022-03-16 17:01:47 · 305 阅读 · 0 评论 -
spring-refresh-prepareBeanFactory-LoadTimeWeaverAwareProcessor
LoadTimeWeaverAwareProcessor实现BeanPostProcessor方法,那么对于BeanPostProcessor接口来讲,postProcessBeforeInitialization与postProcessAfterInitialization有着其特殊意义,也就是说在所有bean的实例化前后都会分别调用对应的方法,那么在LoadTimeWeaverAwareProcessor中的postProcessBeforeInitialization函数中完成了什么样的逻辑呢原创 2022-03-16 16:49:57 · 814 阅读 · 0 评论 -
后置处理器ApplicationContextAwareProcessor
ApplicationContextAwareProcessor原创 2022-03-16 14:35:35 · 268 阅读 · 0 评论 -
Spring自定义事件及事件源码分析
ApplicationEvent、ApplicationListener、ApplicationListenerDetector原创 2022-03-16 10:42:45 · 676 阅读 · 0 评论 -
1、Spring--整体启动流程
启动入口 创建AnnotationConfigApplicationContext创建AnnotationConfigApplicationContext对象,所有的加载创建操作都在这里进行//创建AnnotationConfigApplicationContext对象AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationCon原创 2022-03-15 18:23:01 · 907 阅读 · 0 评论 -
Spring源码分析:Async源码分析
文章目录一、引入@Async1、@EnableAsync()2、@Async()3、如何自定义Async所需要的线程池:4、返回值:二、源码分析1、@EnableAsync注解源码2、AsyncConfigurationSelector3、ProxyAsyncConfiguration4、AbstractAsyncConfiguration5、AsyncAnnotationBeanPostProcessor5.1 第一步:postProcessBeforeInitialization5.2 第二步:构造原创 2022-01-09 21:58:12 · 1306 阅读 · 0 评论 -
spring注解:spring aop注解详解
AOP的基本概念、切面、切点、通知、环绕通知原创 2022-01-09 19:34:01 · 12000 阅读 · 0 评论