spring-beans module依赖了一些jar包
第一个jar包
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包终于大概说了一遍 好饿去吃饭。