
spring5底层
文章平均质量分 84
PnJg?
这个作者很懒,什么都没留下…
展开
-
Mybatis底层实现学习
1.数据库连接创建,释放频繁造成西戎资源的浪费,从而影响系统性能,使用数据库连接池可以解决问题。2.sql语句在代码中硬编码,造成代码的不已维护,实际应用中sql的变化可能较大,sql代码和java代码没有分离开来维护不方便。3.使用preparedStatement向有占位符传递参数存在硬编码问题因为sql中的where子句的条件不确定,同样是修改不方便4.对结果集中解析存在硬编码问题,sql的变化导致解析代码的变化,系统维护不方便。5、JDBC没有提供缓存,增加了数据库压力。原创 2022-11-02 13:11:53 · 1096 阅读 · 0 评论 -
spring MVC执行流程与源码解析
1、(客户端)浏览器发送请求到DispatcherServlet前端控制器,2、DispatcherServlet前端控制器接收到请求后回去找HandlerMapping处理器映射器3、通过HandlerMapping处理器映射器查找合适(根据request对象)的处理器(也就是controller类)原创 2022-10-28 18:28:18 · 513 阅读 · 0 评论 -
spring是如何解决循环依赖的
所谓的循环依赖是指,A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。或者是A 依赖B,B依赖C,C 又依赖A。它们之间的依赖关系如下: 就是单例池,作用就是限制bean在beanFactory中只有一份,为单例bean。 当使用getBean()的时候,先去单例池中看有没有对应的实例,第一次没有就去创建一个实例对象,然后放入一级缓存,后续就可以直接从一级缓存单例池中拿。 只有一级缓存会在存在循环依赖的时候造成死循环的问题。在只有一级缓存的情况下对代码进行了调整,在getbean()之后创建了对象之后就原创 2022-10-09 17:36:55 · 531 阅读 · 0 评论 -
内置后置PostPocess处理器
在执行代码 this.reader = new AnnotatedBeanDefinitionReader(this);的时候就会往BeanDefinitionMap注册ConfiguarationClassPostProcessor(用于注册配置类的处理器),还会去注册很多其他的用于注解的bean定义(例如解析@Autowired)下一句代码的this.scanner = new ClassPathBeanDefinitionScanner(this);原创 2022-10-07 17:30:02 · 429 阅读 · 0 评论 -
Ioc容器加载过程-bean生命周期源码解析
的类例的bean定义如ConfigurationClassPostProcessor.class(在这个类中负责解析配置类,会解析加了@Configuration\@Component\@Import等注解)、AutowiredAnnotationBeanPostProcessor.class(这个类会去解析@Autowired)等处理器,这个只是注册这些类,真正去把类解析bean定义的是由他注册的后置处理器去完成的。调用我们的bean工厂的后置处理器。创建扫面读取到的配置类的工具。原创 2022-09-28 15:35:22 · 703 阅读 · 0 评论 -
spring整体脉络
这里的beanFactory用到了工厂模式的设计模式。配置类的方式有xml文件配置以及注解配置,但是这两种方式读取的信息格式是不一致的,所以有不同的类来读取这些信息例如对XML文件用然后把这些信息放到一个类专门存放这些信息(),这些信息包括类名、作用范围、是否单例等所有生成一个bean对象的信息,再把这交给工厂()去生成对应的对象。在类读取信息的过程中,会有以下的类来辅助读取信息:存放类信息的是放在一个里面,对于不同的类都是由注册放进这个Map中。原创 2022-09-23 12:44:39 · 265 阅读 · 0 评论 -
mybatis源码体系介绍配置文件解析及源码解析
1.数据库连接创建,释放频繁造成西戎资源的浪费,从而影响系统性能,使用数据库连接池可以解决问题。2.sql语句在代码中硬编码,造成代码的不已维护,实际应用中sql的变化可能较大,sql代码和java代码没有分离开来维护不方便。3.使用preparedStatement向有占位符传递参数存在硬编码问题因为sql中的where子句的条件不确定,同样是修改不方便4.对结果集中解析存在硬编码问题,sql的变化导致解析代码的变化,系统维护不方便。5、JDBC没有提供缓存,增加了数据库压力。原创 2022-09-21 12:23:23 · 520 阅读 · 0 评论 -
@Configuration、springboot自动配置
配置类(@Configuration下的这个类)其实相当于一个工厂, 标注 @Bean 注解的方法相当于工厂方法考虑有如下例子: 将来如果要生成一个bean1的实例,首先要找到一个叫myConfig的bean(是一个工厂),再调用这个工厂里面叫"bean1"的方法,生成bean1对象。对于没有static修饰的@Bean工厂方法,叫做实例工厂,需要先把配置类myConfig实例创建出来;有static修饰的是静态方法,只需要拿到myConfig的类对象,然后直接.方法就行。@Bean 不支持方法重载原创 2022-07-08 17:27:41 · 373 阅读 · 0 评论 -
springboot启动过程
1、记录 BeanDefinition 源spring容器刚开始是空的,要去各个源找到beanDefinition,这些源可能是配置类,可能是xml文件。在构造方法里会获取一个主源,也就是引导类,根据引导类去获取beanDefinition。2、推断应用类型根据jar包去判断是什么引用类型3、记录 ApplicationContext 初始化器对ApplicationContext做扩展4、记录监听器监听重要事件5、推断主启动类 记录运行的主类。1、得到 SpringApplicationRunListe原创 2022-07-08 15:48:45 · 257 阅读 · 0 评论 -
springMVC的执行流程
当浏览器发送一个请求 后,请求到达服务器,其处理流程是:服务器提供了 DispatcherServlet,它使用的是标准 Servlet 技术路径:默认映射路径为 ,即会匹配到所有请求 URL,可作为请求的统一入口,也被称之为前控制器jsp 不会匹配到 DispatcherServlet其它有路径的 Servlet 匹配优先级也高于 DispatcherServlet创建:在 Boot 中,由 DispatcherServletAutoConfiguration 这个自动配置类提供 DispatcherS原创 2022-07-07 23:03:15 · 235 阅读 · 0 评论 -
AOP增强、JDK代理、cglib代理
aop除了代理增强之外还有其他的增强方式一:ajc增强,没有利用到spring容器,而是用了ajc编译器来增强方式二:agent类加载增强是jdk自带的代理功能,只能针对接口代理。产生代理需要用到jdk的Proxy中的newProxyInstance方法。参数1-类加载器:因为相比于正常编写的Java代码,代理对象的生成是没有源码的,是在运行期间直接生成字节码文件,所以就需要一个类加载器去加载这个字节码文件参数2-要实现的接口参数3-invocationHandler接口:代理类创建出来,也实现了接口,还要原创 2022-07-07 22:18:24 · 299 阅读 · 0 评论 -
FactoryBean
FactoryBean是一个工厂Bean,它本身是spring容器管理的,但他生产的产品只有一部分是spring管理的因为spring创建了工厂,而产品是工厂调用getobject方法创建的,也没有调用产品的依赖注入、初始化、回调方法。产品的初始化后会走初始化后的增强方法。获取工厂本身的bean:一个在 Spring 发展阶段中重要, 但目前已经很鸡肋的接口 FactoryBean 的使用要点 说它鸡肋有两点:1. 它的作用是用制造创建过程较为复杂的产品, 如 SqlSessionFactory原创 2022-07-07 11:38:06 · 199 阅读 · 0 评论 -
spring底层原理基本分析
userService.class--->推断构造方法--->对象--->依赖注入--->初始化前(@postConstruct)--->初始化(@afterPropertiesSet)--->初始化后(AOP)--->放入Map(单例池)--->Bean对象在上述例子中,因为写了一个有参构造方法,所以无参构造方法不能用了。这个时候在userService属性上面没有加@Autowired注解,但是打印发现这个userService对象存在。orderService是一个bean,spring想去创造原创 2022-07-07 21:08:11 · 441 阅读 · 0 评论 -
手写模拟spring
spring容器启动时需要根据配置类提供的信息去扫描,因为扫描路径定义在了配置类,所以需要判断有没有配置类上有没有ComponentScan注解,如果有就先获取到这个注解对象,接着就需要根据注解对象去获取注解的属性值,也就是获得扫描路径。获取的扫描路径只是包名,另外,扫描的时候需要扫描的是编译好的.class文件。如何获得准确的扫描文件路径呢?通过类加载器的getResource方法,获取相对路径对应的资源,就能获得存放.class文件的路径并获得文件夹,判断文件里的.class文件并筛选出来。原创 2022-07-06 12:48:25 · 257 阅读 · 0 评论 -
spring底层实现-1-BeanFactory与applicationContext的功能与实现
BeanFactory是 ApplicationContext 的父接口,它才是 Spring 的核心容器, 主要的 ApplicationContext 实现都【组合】了它的功能 另一方面,BeanFactory是ApplicationContext一个成员变量 表面上只有 getBean,实际上控制反转、基本的依赖注入、直至 Bean 的生命周期的各种功能, 都由它的实现类提供applicationContext对beanfactory的功能拓展主要体现在四个扩展接口...原创 2022-07-05 20:30:33 · 288 阅读 · 0 评论