![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
spring源码分析
文章平均质量分 95
分析spring的源码与设计
zhen_hong
没个性,不签名
展开
-
1、springcloud客户端的创建
前提:spring版本 -》1.2.6.RELEASE一、基础组件可以看到这个配置类引入注入了很多其他的bean,那么这些bean是哪里注册进来的呢?我们在构建注册中心的时候会引入一个包<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-eureka-client</artifactId></depe原创 2022-01-08 17:45:38 · 788 阅读 · 0 评论 -
13、bean的实例化
第三小节spring为了判断工厂方法返回bean的类型,进行了工厂实例化,并调用工厂方法创建实例。//(1)protected BeanWrapper AbstractAutowireCapableBeanFactory.createBeanInstance(String beanName, RootBeanDefinition mbd, O...原创 2019-08-04 17:03:05 · 177 阅读 · 0 评论 -
14、aop通知的创建
aop标签属于自定义标签,所以对于这类标签需要实现对应命名空间和标签解析器public void org.springframework.aop.config.AopNamespaceHandler.init() { // In 2.0 XSD as well as in 2.1 XSD. //注册解析config标签的解析器 re...原创 2019-08-04 17:15:44 · 191 阅读 · 0 评论 -
15、筛选advisor
spring获取到所有需要advisor后,并不是每个advisor都适用于当前bean,它需要经过筛选,过滤掉不适用的advisor,spring的切点匹配模式非常复杂,使用了解释器模式protected List<Advisor> org.springframework.aop.framework.autoproxy.Abstr...原创 2019-08-04 17:17:48 · 163 阅读 · 0 评论 -
16、创建aop代理
筛选好advisor之后,就可以创建aop了protected Object org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy( Class<?> beanClass, String beanName, Object...原创 2019-08-04 17:19:12 · 111 阅读 · 0 评论 -
17、事务配置的解析
我们在spring使用事务有三种方式,第一种使用xml配置的方式配置,第二种使用注解的方式配置,第三种使用编程的方式。我们首先从xml配置开始<tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:metho...原创 2019-08-04 17:24:57 · 409 阅读 · 0 评论 -
18、事务的创建
上一节,我们围着spring事务绕了一圈,大致看了下事务的外貌,挺漂亮的,但是咱是有内涵的人,做人不能只看外表,俗话说好看的皮囊千千万,有趣的灵魂万里挑一,所以光有一张好看的皮囊是不够的,关键还得看内存,虽然现实好像不是这样。好了,在进行目标方法调用前,spring肯定要通过数据库连接设置事务属性,这样才能启动事务。protected Tra...原创 2019-08-04 17:26:14 · 1326 阅读 · 0 评论 -
19、事务的回滚与提交
上一节中我们分析了事务的创建,这一节我们继续分析事务的回滚与提交protected void completeTransactionAfterThrowing(TransactionInfo txInfo, Throwable ex) { if (txInfo != null && txInfo.hasTransaction...原创 2019-08-04 17:27:25 · 808 阅读 · 0 评论 -
20、spring源码系列总结
一、容器创建流程1.1 创建与初始化如果在web.xml中指定了contextClass上下文参数,那么以contextClass为准,创建指定的自定义容器,如果没有指定那么创建默认的XmlWebApplicationContext容器-》 如果在web.xml中配置了locatorFactorySelector上下文参数,那么根据这个参数指定的位置去加载配置文件(如果没有指定,那么默认加载......原创 2019-10-06 23:55:17 · 527 阅读 · 1 评论 -
12、getBean
在我们使用spring的时候,我们需要ApplicationContext的时候我们会让某个类实现ApplicationContextAware接口,spring在调用refresh刷新方法的时候会在其内部方法prepareBeanFactory中添加ApplicationContextAwareProcessor后置处理器,这个后置处理器会在b...原创 2019-08-04 16:59:28 · 159 阅读 · 0 评论 -
11、ListableBeanFactory的getBeanNamesForType
这个方法我们不止一次的看到,比如在查找BeanFactoryProcessor的时候就见到过,现在查找BeanPostprocessor的时候又见到了,现在我们将它单独拎出来分析下//方法签名//第一个参数type表示要查找的bean的类型//includeNonSingletons 是否考虑非单例bean//allowEagerInit............原创 2019-08-04 16:55:27 · 4009 阅读 · 1 评论 -
10、bean创建前奏之BeanPostProcessor的注册
前面的章节我们分析了容器refresh方法中前5个方法,下次我们来分析下一个方法registerBeanPostProcessors。public void org.springframework.context.support.AbstractApplicationContext.refresh() throws BeansException...原创 2019-08-04 16:52:47 · 490 阅读 · 0 评论 -
2、容器的刷新
上一节分析了父容器(ClasspathXmlApplicationContext)的加载,其加载的配置文件可以在web.xml中配置,但是并没有仔细的去研究父容器的创建的过程,那是因为父容器的创建与子容器的创建基本一致。本节将分析ApplicationContext与BeanFactory的刷新过程。2.1 配置文件的解析 &n...原创 2019-08-04 15:00:48 · 280 阅读 · 0 评论 -
3、配置文件的加载
分析配置文件的加载。.原创 2019-08-04 15:46:02 · 207 阅读 · 0 评论 -
4、自定义标签的解析
上一节我们已经了解到了spring是如何加载配置文件的。那么这一节我们开始了解一下spring是如何解析这些资源的。原创 2019-08-04 16:01:08 · 211 阅读 · 0 评论 -
5、解析默认标签
前一小节,我们分析了加载Document和解析自定义标签的过程,接下来我们回到解析spring默认标签的方法。private void org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(Element ele...原创 2019-08-04 16:13:16 · 109 阅读 · 0 评论 -
6、注解bean的扫描
通常我们需要开启诸如@Component,@Service之类的注解,会在xml中配置一段这样的标签这样我们就可以在指定的包下面使用注解的方式构建bean了,context是自定义的一个命名空间,需要使用自定的方式进行解析,前面我们分析了自定义标签的解析,我们知道spring要想解析自定标签就必须通过一个命名空间解析器解析才能够处理指定命名空间...原创 2019-08-04 16:21:16 · 1015 阅读 · 0 评论 -
7、注解配置的解析
前面我们通过解析配置文件元素的方式加载了BeanDefinition,但是spring野心不止于此,她呼应市场需求,开始慢慢的向注解配置的方向走去,于是乎出现了如今微服务化的spring-boot,那么spring是怎么通过注解配置来解析BeanDefinition的呢?public void refresh() throws BeansExc...原创 2019-08-04 16:29:09 · 122 阅读 · 0 评论 -
8、配置类的加载
第二小节spring已经准备好了配置类,就差读取了。现在我们就顺着spring的流程继续往下分析。public void loadBeanDefinitions(Set<ConfigurationClass> configurationModel) { //用于判断当前配置类是否需要被跳过,在spring筛选配置类的...原创 2019-08-04 16:32:15 · 635 阅读 · 0 评论 -
9、bean创建前奏之beanName与属性名占位符解析
我们在项目中或多或少都会使用properties配置文件,比如配置数据源的时候,可能会在classpath目录下配置一个jdbc.properties文件,用于配置数据库相关的url地址,数据库密码等相关的信息。当我们想要引入这部分数据的时候,我们会在xml配置文件中配置一个标签,如:这个标签表示从类加载路径下的res目录下加载所有proper...原创 2019-08-04 16:35:11 · 455 阅读 · 0 评论 -
1、容器的创建
通过idea快速搭建一个基于spring的web应用,我们就可以从web.xml中spring监听器开始入手1.1 context的创建 在tomcat启动webapp应用的时候会使用多线程调用StandardContext的start方法,在StandarContext启动的时候会调用实现了Ser...原创 2019-08-04 14:46:28 · 910 阅读 · 2 评论