
spring源码学习专栏
文章平均质量分 73
qq_20009015
欢迎关注我的公众号《程序员与王子喵》
展开
-
spring内幕(十一)spring自定义命名空间
在spring的xml配置中有形如http://www.springframework.org/schema/context 形式的url链接这个是spring用来定义各种标签用的 ,同时各种第三方和spring集成的框架 比如说dubbo mybatis等 也有自己的命名空间,这些也叫自定义命名空间。是spring里面一个很重要的设计,给第三方应用留足了充分的拓展。如果要自己定一个标签 且能让spring解析到 ,要如何做呢?目的:要实现的一个自定义标签 标签名字叫lxx 属性有id na原创 2020-06-13 00:37:02 · 597 阅读 · 0 评论 -
spring内幕(十)web项目中的容器初始化前置流程
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http:/.原创 2020-05-28 22:51:28 · 426 阅读 · 0 评论 -
spring内幕(九)ioc容器初始化总结
1、IoC 和 DIIoC (Inversion of Control),即控制反转,是 Spring 的一种设计思想。们直接在对象内部通过 new 来创建对象,是程序主动去创建依赖对象;而在 Spring 中有专门的一个容器来创建和管理这些对象,并将对象依赖的其他对象注入到该对象中,这个容器我们一般称为 IoC 容器。控制反转是将对象管理的控制权反转DI(Dependency Injection),即依赖注入,IoC 和 DI 其实是同一个概念的不同角度描述。依赖注入是指组件之间的依赖关系由容器在原创 2020-05-27 15:00:01 · 382 阅读 · 0 评论 -
spring内幕(八)bean的初始化之populateBean()方法
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean1.先从beanDefinition中取得设置的property值2.执行autowireByName方法 (根据bean的名字注入)或者 autowireByType方法 (根据bean的类型注入)举例:byTypebyname区别就是 byName,bean的id要和需要注入的bean里面的类成员变量名称一致,原创 2020-05-27 13:30:33 · 5198 阅读 · 0 评论 -
spring内幕(七)bean的初始化之creatBean()方法
在creatbean中先看该beanName有没有设置后置处理器,如果有 则返回一个代理对象然后看doCreateBean方法在doCreateBean方法里面createBeanInstance方法将会创建一个对象在createBeanInstance方法里面有从提供者那获取bean instanceSupplier是一个回调接口从工厂方法中获取bean,该工厂方法要先通过配置解析到beanDefinition里面使用指定注入的构造函数进行实例化使用默认的构造函数绝对bea原创 2020-05-19 01:24:22 · 430 阅读 · 0 评论 -
spring内幕(六)bean的初始化过程和循环依赖的解决
在上一篇,记录了ioc容器的初始化,当ioc容器初始化之后,里面保存了BeanDefinition的信息,但此时 bean还不存在。初始化bean有两个地方触发,一个是在容器的初始化的refresh方法里面的 finishBeanFactoryInitialization(beanFactory) 方法该方法里面其实也是调用了getBean() public void refresh() throws BeansException, IllegalStateException { synchron原创 2020-05-18 15:03:40 · 942 阅读 · 0 评论 -
springAop实现过程的debug追踪流程
首先我们创建一个例子创建要织入的类@Servicepublic class UserService { public void login() { System.out.println("登陆"); }}创建切面这里需要加上@Component注解,以便被spring扫描到@Aspect表示这个是一个切面@Aspect@Componentp...原创 2019-11-12 01:09:23 · 1969 阅读 · 1 评论 -
多实现类下注入指定的对象
当使用@Autowired的时候,如果注入的对象是一个接口的有多个实现,会报错,找不到对应的bean 。 因为它没法区分是哪个。报错因为MQConsumer有多个实现原因是@Autowired 的注入方式是 byType 注入, 当要注入的类型在容器中存在多个时,Spring是不知道要引入哪个实现类的那么在同一类型拥有多个实现类的时候,如何注入呢?这种场景下,只能通过 byName ...原创 2019-06-25 10:09:21 · 1006 阅读 · 0 评论 -
使用注解和切面实现方法级权限校验
场景:界面上有很多按钮,然后需要控制权限,有的部门可以按,有的部门不能按。每个按钮都对应了后端的一个方法,因为按钮众多,来不及在前端做控制,因此就控制了每个方法对应的后台方法。1.创建一个注解:/** * @Author laixiaoxing * @Description 校验方法的权限 * @Date 下午10:54 2019/3/24 */@Documented@Re...原创 2019-03-27 22:57:38 · 1000 阅读 · 0 评论 -
spring事务失效的问题
具体场景为:在类A里面有方法a 和方法b, 然后方法b上面用 @Transactional加了方法级别的事务,最后在方法a里面 调用了方法b, 结果发现方法b里面的事务没有生效!!实际上是这样的:在同一个类之中,方法互相调用,切面无效 ,而不仅仅是事务。这里事务之所以无效,是因为spring的事务是通过aop实现的。代码如下: @Autowired ExcelDetai...原创 2019-03-27 22:46:40 · 840 阅读 · 0 评论 -
transactionTemplate用法
业务上需要两个表一起更新的时候最好加事务,单个表不用,数据库有默认的事务隔离举例子,比如说转账, 从A账户转移到B账户, A减去金额,则同时B需要加上金额在类似的场景下,涉及到两个表相关联的更新,要加上事务但是千万注意!!!不要在耗时长的操作里面加事务,事务粒度也要适中spring提供了@transactionTemplate 方法级别的事务注解,使用方便但是 方法...原创 2018-12-06 19:03:06 · 54166 阅读 · 4 评论 -
spring内幕(五)容器的初始化过程之BeanDefinition的注册
前面找到resource ,然后又解析到BeanDefinition之后,接下来要将BeanDefinition注册到容器中。注册就比较简单了,其触发地点在DefaultBeanDefinitionDocumentReader的processBeanDefinition中该方法就是 delegate.parseBeanDefinitionElement(ele)解析元素,然后BeanDef...原创 2020-05-03 19:57:25 · 597 阅读 · 1 评论 -
spring内幕(四)容器的初始化过程之BeanDefinition的解析
BeanDefinition是bean的定义信息,ioc容器初始化阶段,需要知道bean的定义信息,才能为后续的bean创建做准备。那么bean的定义信息来自哪里? 一般是xml配置文件,但是也有需要其他来源,因此会有不同的解析器来对应不同的解析方式。上一篇记录了如何获取到resource这篇记录从xml配置转为beanDefinition的过程。而且需要注意的是 xml里面,除了有spr...原创 2020-05-03 18:41:10 · 567 阅读 · 0 评论 -
spring内幕(三)容器的初始化过程之获取resource
第一阶段 获取resource过程源码解析:FileSystemXmlApplicationContext的创建方法 public FileSystemXmlApplicationContext( String[] configLocations, boolean refresh, @Nullable ApplicationContext parent) throws Bea...原创 2020-05-02 01:38:59 · 583 阅读 · 0 评论 -
spring内幕(二)beanFactory和application的类聚合关系
从beanFactory到最终可以用的标准ioc容器的聚合关系图从beanFactory 到application 再到一个可用的具备高级特性的IOC容器的聚合关系原创 2020-05-01 16:01:04 · 348 阅读 · 0 评论 -
spring内幕(一)容器接口体系
原创 2020-05-01 03:08:32 · 459 阅读 · 0 评论 -
spring的bean注入无效和new创建对象的区别
注意!如果直接new的话,类里面的autowire将不生效项目中用到如下代码然后 在运行的时候发现 通过 @Autowired注入的对象 capitalDetailDOMapper和 excelRecordDOMapper的值为nullpublic class ExcelListener extends AnalysisEventListener<List> {@Autowir...原创 2018-12-17 20:18:02 · 6128 阅读 · 0 评论 -
1.spring源码编译以及使用
研究spring源码的时候,因为直接从jar包里面看到的是idea反编译之后的代码,和源码有细微区别,且没有注释。因此自己从github上拉了一个官方的源码下来。源码是用gradle管理的gradle的简易入门拉下来之后,跟maven类似,也需要编译打包比如说我们需要使用ioc和aop功能需要依次编译spring-oxm (xml和object的转换)spring-core( C...原创 2019-11-11 10:08:57 · 610 阅读 · 0 评论