![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring类框架学习积累
文章平均质量分 63
花园宝宝胡图图
太菜了
展开
-
Spring事务回调
【代码】Spring事务回调。原创 2022-12-13 20:07:27 · 422 阅读 · 0 评论 -
ApplicationContext的refresh()方法-01
因为现在更倾向于基于注解开发,因此重心放在AnnotationConfigApplicationContext上。我们将断点,打在第一行,即上方红色箭头所指向的方向,此时我们发现BeanDefinitionMap中已经存放有6个BeanDefinition了,其中有一个很容易理解,是我们的AppConfig,那么剩下的五个BD是什么呢,同时他们又是什么时候注册的,应该是AnnotatedBeanDefinitionReader的构造方法创建的我们接着分析。AutowiredAn..原创 2022-02-18 10:33:53 · 424 阅读 · 0 评论 -
Spring---BeanDefinition 创建注册过程
RootBeanDefinition和GenericBeanDefinition的区别二者都是基于Xml配置文件类型的beanDefinition的实现,Spring目前建议废除RootBeanDefinition,原因是其不支持父子bean而基于注解的BeanDefinition是AnnotatedGenericBeanDefinition。把配置信息转换为BeanDefinition是由谁来实现的 ----> BeanDefinitionReader(适配器设计模式)但此时我...原创 2022-02-14 22:59:54 · 277 阅读 · 0 评论 -
Spring的循环引用
两个对象都是单实例的情况下,且通过set方式进行注入,才能成功下面设计一个场景public class A { private B b;}public class B{ private A a;}我调用下面的代码A a = (A)BeanFactory.getBean("a");因为是第一次创建,所以 getSingleton() 方法不会获得对象,执行doCreateBean()方法创建对象,在完成实例化后,通过populateBean() 方法进行属.原创 2022-02-09 21:20:27 · 589 阅读 · 0 评论 -
有关Spring对象的属性赋值与初始化---getBean(“beanName“)
上篇博客,经过AbstractAutowireCapableBeanFactory的doCreateBean方法中的createBeanInstance方法,通过反射调用无参构造器来实现对象的创建,并且将创建的对象封装在BeanWrapper中。但此时仅仅完成了对象的创建,对象还需要进行属性的注入以及对象的初始化,下面继续分析对象的属性注入方法和初始化方法,暂时不涉及代理类的创建。属性的注入,主要发生在doCreateBean方法中的populateBean方法中可以发现,此刻对象的属性原创 2022-02-08 16:28:43 · 1966 阅读 · 1 评论 -
有关Spring对象的创建---getBean(“beanName“)
我们从此处开始,跟随debug,解读Spring的对象创建过程。注意:Product对象为单例,且第一次创建的简单对象,即没有使用FactoryBean创建对象首先,进入AbstractBeanFactory这个对象的doGetBean方法首先执行transformedBeanName(name)方法,此方法的作用为根据传入的name找到这个对象对应的BeanName,前文中有述,一个对象一定会存在一个BeanName,如果在xml文件中指定了Id,那么BeanName就是Id,如没有就..原创 2022-02-02 22:54:41 · 2070 阅读 · 0 评论 -
有关Spring中对象的生命周期
几种方式创建对象 简单对象 直接new创建对象()---> 基于反射完成 复杂对象 不能被直接new创建对象 接口类型的创建,不可以直接new,通过实现类来创建,这些实现类也不能直接被new出来的 比如Connection。 所以这些对象使用FactoryBean创建方式(实现FactoryBean接口) getObject(),getObjectType(),isSinglenton原创 2022-01-30 18:22:33 · 1024 阅读 · 0 评论 -
Spring实现自定义标签
在项目的resources下创建META-INF文件夹之后,我们应该建立约束文件xsd,用来设置我们自定义标签的标签名,以及标签名内部的属性约束。targetNamespace处的名字即我们在Spring的配置文件applicationContext.xml处的名字,要一致,即下方红色箭头所指的位置,黑色箭头处叫什么无所谓,与下图中开头处的名字一样,即上方设置什么,下边设置的时候就是什么,elementFormDefault即是否需要校验,下边的element标签即具体的设置自定义标签了。.原创 2022-01-22 22:29:33 · 554 阅读 · 0 评论 -
Spring源码-Xml文件读取到BeanDefinition的封装
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));User u = (User) beanFactory.getBean("u");我们开始的第一步,一定是要读取XML文件,并将xml文件封装成JAVA对象。那么Spring是如何读取配置文件的ClassPathResource是Resource接口的子类实现类Resource接口的作用:读取相关文件.原创 2022-01-19 22:16:59 · 450 阅读 · 0 评论 -
Spring源码-Spring的工厂
BeanFactorySpring体系最底层的工厂,用来定义工厂的基本操作,从其中的方法也可以看出来,都是在定义最基本的操作。HierarchicalBeanFactory让工厂拥有了继承的能力,就是我们说的父子容器,父子工厂。ConfigurableBeanFactory可配置工厂,比如说创建一个对象,到底是单实例,还是多实例(scope就是由这个工厂实现的,还有类型转换器convert),还有后置处理BeanAutowireCapableBeanFactory让工厂拥有自..原创 2022-01-19 21:20:51 · 421 阅读 · 0 评论 -
事务属性的隔离属性
概念: 它描述了事务解决并发问题的特征 并发:多个事务(用户)在同一时间,访问并操作了相同的数据 同一时间:不是指一个时刻,而是一个较小的时间段并发会产生哪些问题: 1、脏读 2、幻影读 3、不可重复读 并发问题如何解决 通过隔离属性来解决。脏读...原创 2021-11-02 16:19:20 · 139 阅读 · 0 评论 -
Spring中对象的生命周期
创建阶段:Spring创建对象时,首先看对象是不是单例对象,即 scope="singleton"还是 scope="prototype",如果为singleton即只创建一次,此对象会在Spring工厂创建的时候通过调用构造方法创建出来,即ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");时被创建出来,而如果对象不是单例对象,该对象会在getBean时调用构造..原创 2021-11-02 00:15:00 · 187 阅读 · 0 评论 -
关于Spring的解耦合
耦合:指定是代码间的强关联关系,一方的改变会影响到另一方问题:不利于代码的维护如何解决耦合问题:工厂设计模式当我们创建简单对象的时候,是通过反射或者new的方式创建,一步一步来:版本1:UserService userService = new UserServiceImpl();即把接口的实现类硬编码在代码中,当实现类改变时势必会改变代码,使得代码重新编译和部署。版本2:UserService userService = BeanFactory.UserServiceF原创 2021-11-01 09:21:21 · 328 阅读 · 0 评论 -
Spring自定义类型转换器
当需要分布式存储数据的时候,即需要将数据存储在很多个数据库的时候,一方面我们要保证数据库的负载均衡,即要保证数据的分布是均匀的,也要保证每个数据库的的吞吐量是大致相同的,即每个数据库的读取频率是相同的总结来说,就是要保证数据库的存储量大致相等,也要保证使用频率相同,不能一个数据库存的全是使用频率高的数据,一直被访问,而别的数据库无人问津。所以在存储数据的时候,可以选择合适的键通过哈希函数out,在模上服务器数量,然后根据得到的数据存储在相应的数据库上这样做可以根据哈希函数的特性,每个数据库里存的原创 2021-10-26 15:35:56 · 299 阅读 · 0 评论