spring-beans的源码分析之依赖jar包分析

spring-beans module依赖了一些jar包

Paste_Image.png

第一个jar包

Paste_Image.png

javax开头的都是javaee的包 java分Java SE、Java EE、Java ME
Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
Java EE(Java Platform,Enterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
Java ME(Java Platform,Micro Edition)。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

这个jar包主要提供了几个注解和一个接口 比较简单
oracle的api地址:http://docs.oracle.com/javaee/7/api/javax/inject/package-summary.html
目前只能看到7版本的 是从版本5开始加入的
其实spring自带的注解@Autowired等价于@Inject、 @Qualifier等价 @Named、Spring自带的@Qualifier的扩展@Qualifier限定描述符注解情况等价于JSR-330的@Qualifier注解
以前的spring注解@Autowired注解需要写到set方法上 不过现在改进已不需要
而 @Inject 只需要写到对应的属性定义上即可所以会出现 javax.inject.jar
而spring的框架是支持这个的所以引入了 javax.inject.jar

为什么有了@Inject还需要@Qualifier,大家想啊如果一个接口有很多实现类 你注入接口的时候是不是得指定是哪个实现类啊,还有@Autowired为什么有时候不需要指定呢,因为只有一个实现类 且spring默认按name注入的 所以就没问题

java.el-api-2.25.jar
虽然在beans module中没有使用到(我没找到)但是其实是Java EE对el表达式的一种支持。
oracle文档地址:http://docs.oracle.com/javaee/7/api/javax/el/package-summary.html
文档第一句Provides the API for the Unified Expression Language 3.0 el表达式3.0的支持。el表达式主要用在jsp页面中,获取对象属性之类的操作,其实就是一种语法 而这个jar包就是为该语法提供支持的。
snakeyaml-1.15.jar

YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写,早先YAML的意思其实是:"Yet Another Markup Language"(另外一种置标语言),但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名,YAML的官方定义很简单,即一种人性化的数据格式定义语言,其主要功能用途类似于XML或JSON,YAML使用空白字符和分行来分隔数据,且巧妙避开各种封闭符号,如:引号、括号等,以避免这些符号在复杂层次结构中变得难以辨认。YAML的语法与高阶语言类似,可以很简单地表述序列(java中的list)、杂凑表(java中的map)、标量(java中的基本类型等)数据结构,它重点强调可阅读性,其实JSON语法是YAML的子集,大部分的JSON文件都可以被YAML的剖析起剖析。虽然大部分的数据分层形式也可以使用类似JSON的格式,不过YAML并不建议这样使用,除非这样编写能让文件可读性增加,更重要的是,YAML的许多扩展在JSON是找不到的,如:进阶资料形态关系锚点字串不需要引号映射资料形态会储存键值的顺序等。
java对此语法文件的解析实现即为此jar包,.yaml文件解析。
SnakeYAML 网站 : http://snakeyamlrepo.appspot.com/
支持Unicode,包括UTF-8/UTF-16的输入/输出;
为序列化和反序列化本地的Java对象提供了高级API;
支持YAML类型库中的所有类型;
比较理性的错误信息。

SnakeYA要求Java 5或者更高版本。目前的稳定版本是: 1.5
示例代码:
Yaml yaml = new Yaml();String document = "\n- Hesperiidae\n- Papilionidae\n- Apatelodidae\n- Epiplemidae";List<String> list = (List<String>) yaml.load(document);System.out.println(list);
输出结果:['Hesperiidae', 'Papilionidae', 'Apatelodidae', 'Epiplemidae']

junit-4.12.jar
junit 比较熟悉是做单元测试用的,断言、测试异常,捕获异常,测试方法的性能的测试。
mockito-core.jar
mock也是做测试目的用的,主要解决比较难以构建的对象,是简单轻量级能够替代EasyMock的框架。使用简单,测试代码可读性高。
源码见github:https://github.com/mockito/mockito/blob/master/README.md
hamcrest-all-1.1.jar
hamcrest是辅助测试工具 ,junit中的断言 就是使用的它,但是二者是不同的框架
地址:http://hamcrest.org/JavaHamcrest/
log4j.jar
这个是记录日志用的
tomcat-embed-core.jar
这个jar包很神奇的可以不将项目copy到tomcat目录下而实现基于tomcat环境的开发

  //设置工作目录
    String catalina_home = "C:/";
    Tomcat tomcat = new Tomcat();
    tomcat.setHostname("localhost");
    tomcat.setPort(startPort);
    //设置工作目录,其实没什么用,tomcat需要使用这个目录进行写一些东西
    tomcat.setBaseDir(catalina_home);
//设置程序的目录信息
    tomcat.getHost().setAppBase("e:/");
    // Add AprLifecycleListener
    StandardServer server = (StandardServer) tomcat.getServer();
    AprLifecycleListener listener = new AprLifecycleListener();
    server.addLifecycleListener(listener);
    //注册关闭端口以进行关闭
    tomcat.getServer().setPort(shutdownPort);

//加载上下文
StandardContext standardContext = new StandardContext();
standardContext.setPath("/aa");//contextPath
standardContext.setDocBase("aa");//文件目录位置
standardContext.addLifecycleListener(new Tomcat.DefaultWebXmlListener()) ;
//保证已经配置好了。
standardContext.addLifecycleListener(new Tomcat.FixContextListener());
standardContext.setSessionCookieName("t-session");
tomcat.getHost().addChild(standardContext);
tomcat.start();
tomcat.getServer().await();
private static void shutdown() throws Exception {
Socket socket = new Socket("localhost", shutdownPort);
OutputStream stream = socket.getOutputStream();
for(int i = 0;i < shutdown.length();i++)
stream.write(shutdown.charAt(i));
stream.flush();
stream.close();
socket.close();
}
objenesis.jar和spring-cglib-repack.jar

spring-cglib-repack是spring cglib的具体实现 objenesis是序列化用的
objenesis 介绍地址:http://objenesis.org/

spring-cglib-repack 在spring4中内联了objenesis类库
基于CGLIB的类代理不再要求类必须有空参构造器了:
这是一个很好的特性,使用构造器注入有很多好处,比如可以只在创建Bean时注入依赖,然后就不变了,如果使用setter注入,是允许别人改的。当然我们可以使用spring的字段级别注入。如果大家使用过如Shiro,我们可能要对Controller加代理。如果是类级别代理,此时要求Controller必须有空参构造器,有时候挺烦人的。spring如何实现的呢?其内联了objenesis类库,通过它来实现,可以去其官网看看介绍

jar包终于大概说了一遍 好饿去吃饭。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容