热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spring源码学习一

个人的学习总结如下:1.系统环境变量验证,判断环境是否包含某个变量,如果没有,则启动不了继承ClassPathXmlApplicationContext,重写initPropert

个人的学习总结如下:

1.系统环境变量验证,判断环境是否包含某个变量,如果没有,则启动不了

继承ClassPathXmlApplicationContext,重写initPropertySources方法(由于AbstractApplicationContext的refresh方法中,prepareRefresh中initPropertySources为空,方便后续扩展)

public class MyClassPathXmlApplicationContent extends ClassPathXmlApplicationContext {
public MyClassPathXmlApplicationContent(String configLocations) {
super(configLocations);
}
@Override
protected void initPropertySources() {
System.out.println(this.getEnvironment().getRequiredProperty("abc"));
}
}

2.自定义标签

自定义handler,handler找到parser,parser填充实体

自定义一个实体类

ublic class Jsuper {
private String id;
private String username;
private Integer height;
private Integer age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getHeight() {
return height;
}
public void setHeight(Integer height) {
this.height = height;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

  自定义parser,继承AbstractSingleBeanDefinitionParser,重写getBeanClass,重写doParse方法

public class JsuperBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
@Override
protected Class getBeanClass(Element element) {
return Jsuper.class;
}
@Override
protected void doParse(Element element, BeanDefinitionBuilder builder) {
if(element.hasAttribute("id")){
builder.addPropertyValue("id",element.getAttribute("id"));
}
if(element.hasAttribute("username")){
builder.addPropertyValue("username",element.getAttribute("username"));
}
if(element.hasAttribute("height")){
builder.addPropertyValue("height",element.getAttribute("height"));
}
if(element.hasAttribute("age")){
builder.addPropertyValue("age",element.getAttribute("age"));
}
}
}

  自定义handler,继承NameSpaceHandlerSupport,重写init方法

public class JsuperNamespaceHandler extends NamespaceHandlerSupport {
@Override
public void init() {
registerBeanDefinitionParser("user",new JsuperBeanDefinitionParser());
}
}

  resources下新增spring.handlers,spring.schemas

spring.handlers
http\://www.jsuper.com/schema/user=com.jsuper.test.custombean.JsuperNamespaceHandler
spring.schemas
http\://www.jsuper.com/schema/user.xsd=META-INF/user.xsd

View Code

  新增user.xsd

xml version="1.0" encoding="UTF-8" standalOne="no"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace
="http://www.jsuper.com/schema/user"
xmlns:tns
="http://www.jsuper.com/schema/user"
elementFormDefault
="qualified">
<element name="user">
<complexType>
<attribute name="id" type="string">attribute>
<attribute name="username" type="string">attribute>
<attribute name="height" type="integer">attribute>
<attribute name="age" type="integer">attribute>
complexType>
element>
schema>

user.xsd

  在xml中新增

xmlns:jsuper="http://www.jsuper.com/schema/user"
http://www.jsuper.com/schema/user http://www.jsuper.com/schema/user.xsd
<jsuper:user id="aaa" username="zs" age="18" height="180">jsuper:user>

bean.xml

可以从BeanFactory中获取aaa,这里有一个需要注意的,xml中的bean必须有id

 



推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
author-avatar
DarkBaron_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有