spring
文章平均质量分 75
sinat_33472737
这个作者很懒,什么都没留下…
展开
-
ConfigurationClassPostProcessor流程图解
原创 2022-05-08 21:27:12 · 271 阅读 · 0 评论 -
springboot starter原理简单介绍
原理简单概述springboot 各种starter简单来说就是为了加载各种依赖包中配置类@Configuration,这些配置类必须在模块的resources/META-INF 目录下spring.factories文件中键为org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的值中声明因为我们不可能在启动类中声明扫描的包包含所有依赖包的配置类@Configuration,那样不现实。所以spring就提供了一种机制来加载这原创 2022-05-06 14:30:43 · 388 阅读 · 0 评论 -
spring @Import介绍
文档翻译指示要导入的一个或多个组件类——通常是@Configuration类。提供与 Spring XML 中<import/>元素等效的功能。允许导入@Configuration类、 ImportSelector和ImportBeanDefinitionRegistrar实现,以及常规组件类(从 4.2 开始;类似于AnnotationConfigApplicationContext.register )何时解析@Import答:处理配置类时。具体代码分析如下:Configurat原创 2022-05-05 21:34:05 · 458 阅读 · 0 评论 -
spring data jpa原理浅析
当我们把一个标准的spring data jpa的repository注入到其它spring bean中时,会发现该repository实际上是由JdkDynamicAopProxy生成的一个代理类(org.springframework.data.jpa.repository.support.SimpleJpaRepository@5748638c)。查看SimpleJpaR...原创 2020-03-17 10:14:06 · 281 阅读 · 0 评论 -
springboot2.1.7启动 AbstractApplicationContext refresh(一)
prepareRefresh()准备此上下文以进行刷新,设置其启动日期和活动标志以及执行属性源的任何初始化。ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()告诉子类刷新内部bean工厂。beanFactory为DefaultListableBeanFactory。prepareBeanFactory(beanFactory)配置工厂的标准上下文特征(设置beanFactory的各种属性) p原创 2021-01-25 22:34:10 · 174 阅读 · 1 评论 -
springboot2.1.7启动 AbstractApplicationContext refresh(三)
目录registerListeners()finishBeanFactoryInitialization(beanFactory)finishRefresh()registerListeners()检查侦听器bean并注册它们。 protected void registerListeners() { // Register statically specified listeners first. for (ApplicationListener<?> lis原创 2021-01-28 00:32:42 · 219 阅读 · 1 评论 -
springboot2.1.7启动分析(三)SpringApplication run
context = createApplicationContext();因为时servlet,所以会去实例化org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext这个context 。GenericApplicationContext是其父类,所以会执行GenericApplicationContext无参构造函数,这就是我们看到的ApplicationContext原创 2021-01-21 10:03:09 · 610 阅读 · 0 评论 -
springboot2.1.7启动分析(二)SpringApplication run
SpringApplicationRunListeners listeners = getRunListeners(args); private SpringApplicationRunListeners getRunListeners(String[] args) { Class<?>[] types = new Class<?>[] { SpringApplication.class, String[].class }; return new SpringApp..原创 2021-01-18 16:58:13 · 387 阅读 · 0 评论 -
springboot2.1.7启动分析(一)SpringApplication实例化
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { this.resourceLoader = resourceLoader; Assert.notNull(primarySources, "PrimarySources must not be null"); this.primarySources = new LinkedHashSet<>(Arr..原创 2021-01-17 23:29:17 · 318 阅读 · 0 评论 -
springboot2.1.7启动 AbstractApplicationContext refresh(二)
invokeBeanFactoryPostProcessors(beanFactory)调用在上下文中注册为bean的工厂处理器。(实例化并调用所有注册的BeanFactoryPostProcessor Bean,并遵循显式顺序(如果给定的话)。必须在单例实例化之前调用) protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) { PostProcessorRegis原创 2021-01-27 13:59:07 · 308 阅读 · 0 评论 -
ConfigurationClassPostProcessor
文档翻译用于对@Configuration类进行引导处理。此后处理器按优先级排序,因为在任何其他BeanFactoryPostProcessor执行之前, @Configuration类中声明的任何Bean方法都必须注册其对应的Bean定义,这一点很重要。作为BeanDefinitionRegistryPostProcessor的扩展回调@Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry原创 2021-02-06 20:22:14 · 491 阅读 · 0 评论 -
spring 获取FactoryBean生成的bean源码浅析
spring获取容器中的bean是通过getBean获取的,参数是对应的beanName。spring会先从缓存中获取bean,如果没有,就会执行AbstractAutowireCapableBeanFactory的doCreateBean方法创建bean(一些特殊的bean会在doCreateBean之前会调用之前提前初始化,这里不做讨论),在调试doCreateBean的时候会发现对于类似于s...原创 2020-04-29 14:56:17 · 540 阅读 · 0 评论 -
spring事务注解@Transactional
之前文章springAop原理之查找和原始bean关联的Advisor.已经分析了spring如何查找和判断Advisor是否和原始Bean关联,这里以BeanFactoryTransactionAttributeSourceAdvisor(事务注解关联的Advisor)为例,具体分析下最后一个canApply方法。ClassFilterBeanFactoryTransactionAttributeSourceAdvisor的切点为TransactionAttributeSourcePointcut原创 2022-04-29 21:37:45 · 719 阅读 · 0 评论 -
springAop原理之(二)Advisor、pointcut接口族介绍
Advisor:包含AOP通知的基本接口(在连接点采取的操作)和一个确定建议的适用性的过滤器(例如一个切入点)。这个接口不是供Spring用户使用的,而是允许在支持不同类型的通知时具有通用性。Spring AOP基于通过方法拦截的环绕通知传递,符合AOP联盟拦截API。Advisor接口支持不同类型的建议,如之前和之后的通知,不需要使用拦截实现。PointcutAdvisor:由切入点驱动的所有Advisor的超级接口。这几乎涵盖了除introduction advisors以外的所有原创 2022-04-29 10:23:52 · 1712 阅读 · 0 评论 -
springAop原理之(四)查找和原始bean关联的Advisor
spring如何判断bean是否需要被代理spring在创建完bean后,需要判断是否需要给当前bean创建代理对象。initializeBean时会调用applyBeanPostProcessorsAfterInitialization方法,该方法会调用所有BeanPostProcessor的postProcessAfterInitialization。AbstractAutoProxyCreator就是一个BeanPostProcessor,该类的postProcessAfterInitiali原创 2022-04-29 10:19:15 · 1176 阅读 · 0 评论 -
Spring Security filter探究(一)
Spring Security架构可以看出,Spring Security是通过内部的过滤器链实现认证和授权逻辑的。Spring Security内部的过滤器是有先后顺序的。比如UsernamePasswordAuthenticationFilter如果认证成功,那么AnonymousAuthenticationFilter肯定就不需要设置匿名者了。所以UsernamePasswordAuthenticationFilter在AnonymousAuthenticationFilter之前。具体顺序可看官网原创 2022-04-28 14:54:29 · 1170 阅读 · 0 评论 -
SpringSecurity HttpSecurity链式调用探究
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2022-04-24 11:32:37 · 713 阅读 · 0 评论 -
doCreateBean方法中BeanCurrentlyInCreationException解析
populateBean(beanName, mbd, instanceWrapper); exposedObject = initializeBean(beanName, exposedObject, mbd); 。。。。 if (earlySingletonExposure) { Object earlySingletonReference = getSingleton(beanName, false); if (earlySingleto...原创 2020-11-18 23:37:38 · 325 阅读 · 0 评论 -
spring循环依赖简单图示例
从上图可以看出,只有循环依赖的对象才会放到earlySingletonObjects中(A),不存在的直接从singletonFactories 进入到singletonObjects中(B,C)singletonObjects :单例对象列表singletonFactories :单例工厂列表earlySingletonObjects: 循环对象依赖列表,对象在创建之后,进行注入过程中,发现产生了循环依赖,那么会将对象放入到这个集合,并且从singletonFactories中移除掉...原创 2020-07-23 12:33:31 · 273 阅读 · 0 评论 -
springAop原理之(五)创建代理bean及其代理bean方法具体执行过程
上一篇文章https://blog.csdn.net/sinat_33472737/article/details/105414097我们了解到了spring是如何把Advisor关联起来的,wrapIfNecessary部分源码// Create proxy if we have advice.//获取bean有关的AdvisorObject[] specificIntercepto...原创 2020-04-10 17:23:41 · 869 阅读 · 0 评论 -
springAop原理之(三)Advised接口族
Advised:已经被建议的对。指的就是advice和Pointcut被Advisor关联了起来。这些Advisor会和aop代理的target绑定,当aop代理执行某一个方法是,会从所有的Advisor中匹配出和该方法匹配的Advoisor,这些Advisor会被包装厂MethodInterceptor返回。JdkDynamicAopProxy或基于CGLIB的ObjenesisCglibA...原创 2020-04-02 13:36:22 · 991 阅读 · 0 评论 -
springAop原理之(一)aopalliance 源码浅析
aopalliance项目是几个对AOP和Java感兴趣的软件工程人员之间的联合开源项目,里面包含了针对面向切面的顶层接口。里边包含了8个接口和1个异常类。Advice(通知):切面在特定连接点上采取的操作。不同类型的建议包括“前后”、“前后”的建议。许多AOP框架,包括Spring,将通知建模为拦截器,并维护围绕连接点的拦截器链。Advice接口只是一个标记接口,Interce...原创 2020-03-19 11:25:41 · 501 阅读 · 0 评论