查看: 104|回复: 0

Spring自定义标签使用及原理

[复制链接]
论坛徽章:
2
机器学习徽章
日期:2019-05-23 14:16:18spring徽章
日期:2019-06-13 15:06:59
发表于 2019-4-14 19:57 | 显示全部楼层 |阅读模式

管理 基础 存储 开源 Spring 数据结构

1.自定义标签的用途自定义标签可以说是spring提供的较大、最强的Hook(钩子),通俗的讲就是给后续小伙伴开发组件,提供一个标准公共可拔插”接口”,大家可以理解为手机充电器的工业标准口,为了方便各个充电器生产厂家生产,而制定的标准。
    既然说自定义标签如此强大,我们在哪里应用的呢? 我们知道spring发展越来越强大,但核心的组件只有spring-core和spring-beans,那么有些人会问我们经常用的context,aop,tx不是吗?对的,这些都是在核心上做的扩展,而这些扩展恰恰是通过自定义标签实现扩展的,还有一些公共开源组件amq,Redis,dubbo等等,他们都利用了自定义标签来扩展,使得spring容器的功能越发强大。


2.自定义标签使用
    既然自定义标签用途那么广,那么如何使用自定义标签呢?这里我将带领大家感受下自定义标签的使用。需要的文件(按照spring加载、解析的顺序)有以下五个基本文件:
①spring.schemas
②XSD文件
③spring.handlers
④NamespaceHandler
⑤BeanDefinitionParser
⑥最后引入到配置文件中使用。
基本自定义标签需要实现两个关键接口:NamespaceHandlerSupport,BeanDefinitionParser


3.自定义标签如何被spring解析
    这里涉及到整个spring容器对于xml文件的解析过程,理解起来可能会有点困难,但我会尽量给大家做通俗易懂的介绍。
我们只介绍spring对于配置文件的解析过程,不介绍bean对象的实例化,初始化,及管理过程。

    我们先介绍几个基础知识
①我们经常说的spring容器到底指什么,以及如何存储我们配置bean属性?
基础容器BeanFactory,扩展容器ApplicationContext,他们解析配置文件的过程基本相同。
存储结构为Map<beanName, BeanDefinition>实现为ConcurrentHashMap,也就是说我们最终解析出来的xml文件的会存储到这个数据结构中,这就是我们的容器。

②我们解析出配置问文件用哪个对象来接收存储?
我们知道在抽象对象世界里everything is object.所以我们将bean抽象成了对象,它的顶层接口就是BeanDefinition,而子类包括了ChildBeanDefinition,RootBeanDefinition ,GenericBeanDefinition,默认文件解析入Map为GenericBeanDefinition.


参考:
https://blog.csdn.net/zzg1229059735/article/details/82669955

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

 

GMT+8, 2019-6-17 10:50 , Processed in 0.109421 second(s), 30 queries .

关闭

扫一扫加入
本版微信群