Spring 源码解析
根据官方文档对Spring功能进行简单的总结,并从简单案例和源码入手对Spring的实现进行详细解析,让我们对Spring有更加深入的理解。
微服务技术栈
这个作者很懒,什么都没留下…
展开
-
Spring源码解析之默认标签的解析与Bean的注册
前面我们介绍了Spring源码解析之容器的创建与XML配置的读取,Spring IOC容器的创建也就是DefaultListableBeanFactory的创建,配置文件的加载最终被解析为Document实例,本篇我们介绍配置标签的解析与Bean的注册,在前面一篇我们最终看到标签的解析与Bean的注册是在XmlBeanDefinitionReader的registerBeanDefinitions(doc, resource)方法中完成的,下面我们查看该方法的源码:public int registe原创 2020-09-27 20:26:18 · 189 阅读 · 0 评论 -
Spring源码解析之自定义标签的解析与Bean的注册
前面我们降解了Spring中默认标签的解析,下面我们介绍Bean的自定义标签的解析,为何Spring这么强大,就是它具有强大的可扩展性,因此我们的自定义标签也可以通过Spring解析,比如Dubbo的自定义标签,其解析也是委托给BeanDefinitionParserDelegate完成的,调用的方法为:parseCustomElement(Element ele),源码如下所示:public BeanDefinition parseCustomElement(Element ele) { r原创 2020-09-27 20:26:32 · 521 阅读 · 0 评论 -
Spring源码解析之容器的创建与XML配置的读取
在前面我们介绍过Spring将资源抽象为Resource,并且提供了不同的实现处理不同类型的资源,比如File、Http、Ftp、classpath等等,本篇我们讲述Spring容器的创建与资源的加载,对于Spring容器,我们说XmlBeanFactory或者ApplicationContext都可以是Spring容器,都可以从其中获取到Bean,但是其核心类为DefaultListableBeanFactory,创建IOC容器的过程也就是创建DefaultListableBeanFactory实例的过程原创 2020-09-25 21:29:35 · 248 阅读 · 0 评论 -
Spring 源码解析之资源抽象Resource接口
在Java提供的访问资源的API中,我们可以通过URL指定资源的位置,Java提供的API会使用不同类型的URLHandler去处理,但是它也有不足之处,并不能让所有人获取低层次的资源。比如没有提供从classpath或者ServletContext下访问资源的的标准URL实现。虽然可以为专门的URL前缀注册新的处理程序(类似于http:等前缀的现有处理程序),但这通常是相当复杂的,并且URL接口仍然缺少一些需要的功能,例如检查所指向的资源是否存在的方法。因此Spring提供了对资源访问的抽象,在Sprin原创 2020-09-24 20:49:01 · 367 阅读 · 0 评论 -
RestTemplate 源码解析与ClientHttpRequestInterceptor拦截器的使用
使用过Spring的对RestTemplate的使用应该非常了解了,它是Spring提供的Http请求客户端工具,本篇博客不再介绍RestTemplate的使用,仅仅对RestTemplate的调用流程进行解析,如果想要了解RestTemplate的使用,可以自行查看Spring的官方文档的Spring MVC部分。首先我们看RestTemplate提供的调用方法,如下RestTemplate提供了很多的API供我们调用,下面仅仅展示一部分:public <T> T getForObjec原创 2020-09-23 21:54:40 · 2187 阅读 · 0 评论 -
Spring中的Aware接口的使用——ApplicationContextAware与BeanNameAware
当ApplicationContext创建一个实现org.springframework.context.ApplicationContextAware接口的对象实例时,该实例将会提供一个对ApplicationContext的引用。以下显示了ApplicationContextAware接口的定义:public interface ApplicationContextAware { void setApplicationContext(ApplicationContext applicati原创 2020-09-22 21:16:53 · 1421 阅读 · 1 评论 -
Spring 中时事件处理机制——ApplicationEvent
ApplicationContext中的事件处理通过ApplicationEvent类和ApplicationListener接口提供。如果实现ApplicationListener接口的bean注册到ApplicationContext中,则每次ApplicationEvent发布到ApplicationContext时,都会通知该bean。本质上,这是标准的观察者设计模式。从Spring4.2开始,事件结构得到了显著的改进,提供了一个基于注解的模型以及发布任意事件的能力(也就是说,不一定从Applica原创 2020-09-21 20:30:37 · 4835 阅读 · 0 评论 -
Spring 注入注解 @Value、@Autowire 、@Qualifer、@Resource 和 @Inject
Spring IOC 不仅仅能为我们创建并管理Bean的实例,另一方面它还能帮我们自动注入值或者实例。该篇讲解Spring使用注解进行Bean或者值的注入。@PropertyResource注解能够导入Properties文件资源让Spring解析,并且配合@Value注解,为实例注入值。@Configuration@PropertySource(value={"classpath:/...原创 2020-05-07 10:44:36 · 781 阅读 · 0 评论 -
BeanFactory 和 FactoryBean
学习Spring的时候,一开始对于BeanFactory和FactoryBean都会很模糊,甚至觉得这两个类是有着类似的功能,其实比较简单的说,BeanFactory是一个工厂类,用于Bean的创建和获取等。FactoryBean则是一个Bean。BeanFactoryBeanFactory API为Spring的IOC功能提供了基础。其特定的规范主要用于与Spring和相关第三方框架的其...原创 2020-04-30 14:34:55 · 111 阅读 · 0 评论 -
Spring IOC 容器 @Conditional 和 @Profile
说起@Profile,对于使用Spring的大多数人都很熟悉,它是Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的注解。比如我们有开发环境(dev),测试环境(Test),生产环境(Product),这三个环境分别使用不同的数据库源和Redis服务。使用@Profile注解指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件。如下为@Profile...原创 2020-04-23 17:52:23 · 227 阅读 · 0 评论 -
Spring IOC 注解 — @ImportResource,@Import
在Spring IOC 注解 — @Bean,@Scope 和 @Lazy 一篇,我们介绍了使用@Bean注解将一个组件交给Spring IOC容器去管理,除此之外我们还可以通过@ImportResource和@Import往容器中注入Bean。@ImportResource@ImportResource用于导入包含Bean定义的资源,一般为我们早期学习Spring时配置的xml资源文件,...原创 2020-04-23 17:52:09 · 188 阅读 · 0 评论 -
Spring IOC 注解 — @Bean,@Scope 和 @Lazy
Spring可以做很多事情,为企业级开发提供了丰富的功能,但是这些功能都依赖于它的两个核心特性:依赖注入(DI)或控制反转(IOC)和面向切面编程(AOP)。如果说Spring IOC容器将开发人员从对Bean(实例)的管理的繁重任务中脱离出来,那么Spring提供的注解则将开发人员从Spring中繁复的xml配置中解脱出来。Spring为我们提供了很多注解,用于将我们自己写的组件交给Spri...原创 2020-04-22 09:20:50 · 352 阅读 · 0 评论