Java基础组件快速入门
最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜。现在手头的工作基本完成了,因此打算好好来归纳下java的相关工具库,将来需要借助你们,好好的在JAVA的汪洋下,乘风破浪。(希望成为电影中如小马一样程序员J)
长风破浪会有时,直挂云帆济苍海—李白

首先通过一张思维导图,来熟悉常用的java基础工具包,掌握好工具是对一个优秀工程师的基本要求哦!J

图中标红星表示必须精通的内容,黄星为需要熟练掌握的内容,其他为补充内容,本文主要会介绍下基础库、框架库和log库的内容。

- Apache Commons Lang
 
虽然现在推荐使用Guava替代Commons,但同时使用这两个深入人心的基础库也是棒棒哒,下面通过一个表格来熟悉最常用的使用。
| 
 功能  | 
 示例  | 
| 
 字符串空判断  | 
 StringUtils.isEmpty(null), StringUtils.isBlank(" ")  | 
| 
 字符串trim  | 
 StringUtils.trim(" abc "), StringUtils.strip(" abc", "xyz")  | 
| 
 字符串分割  | 
 String[] r01 = StringUtils.split(" abc dd") String[] r02 = StringUtils.split("abc,dd", ",") StringUtils.splitPreserveAllTokens(str4, ",")  | 
| 
 数组元素拼接  | 
 StringUtils.join(array, ",")  | 
| 
 随机数  | 
 RandomStringUtils.randomAscii(10)  | 
| 
 数组操作  | 
 ArrayUtils.clone(arr) ArrayUtils.isEmpty(arr) ArrayUtils.toObject(array10)  | 
| 
 日期  | 
 DateUtils.parseDate("2010/01/01 11:22:33", new String[]{"yyyy-MM-dd HH:mm:ss"})  | 
| 
 基本反射工具  | 
 BeanUtils.getProperty(bean, "name") SampleBean newBean = (SampleBean) BeanUtils.cloneBean(bean); BeanUtils.describe(bean); //获得注解 BeanUtils.populate(bean, map);//填充数据 String[] array = BeanUtils.getArrayProperty(bean, "array");//获取数组 String value = BeanUtils.getNestedProperty(bean, "nestedBean.nestedProperty") BeanUtils.setProperty(bean8, "url", "http://www.google.com/"); DateConverter converter = new DateConverter(); converter.setPattern("yyyy/MM/dd HH:mm:ss"); ConvertUtils.register(converter, Date.class); ConvertUtils.register(converter, String.class); BeanUtils.setProperty(bean9, "date", "2010/12/19 23:40:00");  | 
| 
 实现equals等方法  | 
 public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); }  | 
| 
 InvokeMethod  | 
 Main main = new Main(); Child child = new Child(); MethodUtils.invokeMethod(main, "pass", child); // OK MethodUtils.invokeExactMethod(child, "pass', child);  | 
| 
 lang.time.*  | 
 FastDateFormat相对于SimpleDateFormat是线程安全的  | 
Tip:
关于线程安全,常用的方法有:每次都加上new;加上synchronize;使用thread-local,在线程重用时,减少了new的次数;使用object-pool,共享多个对象。
- Guava
 
| 
 功能  | 
 示例  | 
| 
 复写常用Object方法  | 
 Objects.equal(null, null) Objects.hashCode(person) Objects.toStringHelper(Person.class) ComparisonChain.start().compare(name, other.name).result();  | 
| 
 Throwables  | 
 Throwable getRootCause(Throwable) List<Throwable> getCausalChain(Throwable) String getStackTraceAsString(Throwable)  | 
| 
 Immutable不可变集合  | 
 很好的防御编程(defensive programming)的技术实践 
常见集合Colletion,List,Set,SortedSet,Map,SortedMap都有其对应类型  | 
| 
 其他  | 
 Strings. Range, EventBus, Caches, null值的管理(java的一个痛点)  | 
常用guava使用示例如下
            List<String> orderNumberList = Lists.transform(orderList, new Function<TrainOrderInfo, String>() {
                @Override
                public String apply(TrainOrderInfo input) {
                    return input.getOrderNumber();
                }
            });
Guava官方教程的中文翻译:http://ifeve.com/google-guava/
- Joda-time
 
这部分是后来补上的,在.NET中时间日期使用非常简单方便,但java中居然是个痛点!!!一些基础的时间日期操作常常被Date,TimeStamp,Calendar等类型搞的相对复杂。可以这么说,掌握了guava,joda-time,最好还有jdk8(生产暂时未普及),基本上代码效率基本上可以回到写c#的水平上。最基础的一个例子,获取某一日期当月第一天的日期部分:DateTime curMonth1 = DateTime.now().dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
官网文档:http://www.joda.org/joda-time/userguide.html
DateTime result = DateTime.now();
		System.out.println(result.withTimeAtStartOfDay());
		System.out.println(result.plusDays(1).withTimeAtStartOfDay());
System.out.println(result.dayOfWeek().withMinimumValue().withTimeAtStartOfDay());
		System.out.println(result.plusWeeks(1).dayOfWeek().withMinimumValue().withTimeAtStartOfDay());
DateTime temp = result.dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
		System.out.println(temp);
		System.out.println(result.plusMonths(1).dayOfMonth().withMinimumValue().withTimeAtStartOfDay());
System.out.println(new Timestamp(temp.getMillis()));
		System.out.println(new Date(temp.getMillis()));

- Spring系列(详情可见Spring系列学习)
 
其是2003年兴起的一个轻量级java开发框架项目,经过多年发展,已经成为java项目的(事实上)标准化组件,包括很多子项目和相关项目,可以说是非常的棒,大幅简化程序员工作,且稳定高效。(朴实来说,它非常适合现在互联网场景,不需要大而全的超级应用,而是需要不断的迭代快速上线应景的项目,后台通过SOA提供有效的服务。对于个人来说,现在项目除开H5等前端内容,核心就是3扳斧,Web提供用户入口,SOA服务提供核心服务,Job完成各类脏活累活,其他的主要起到辅助作用)
核心功能:Spring-Core,核心就是完成Bean的创建(DI)和管理,比我们自己管理的更加系统合理,且编码美观,思路清晰。
辅助功能:Spring-Aop切面功能,Tx事务功能,RMI远程服务功能,JmsTemplate消息功能等,JDBC数据库连接等功能(整合MyBatis)。
Web支持:SpringMvc,市场份额第一,不解释。
最近两年火热无比的:Spring boot,以rapid applicaition development为宗旨,简化项目开发,但背后和过去的java开发无本质区别。
- 前端框架选型:
 
angular+bootstrap+jQuery,后台java,基本适用大部分中小项目。针对大型项目,可以参见博主叶小钗大神的浅谈Hybrid技术系列文章。
- 日志
 
Java非常重视接口与实现的分离,利用接口定义标准,如果说.NET(只有微软一家的实现,曾经的辉煌,也造成了现在业务的萎缩)这是可选项的话,java就是就是必选项。比如spring的aop就只支持使用在接口上,而SLF4J就是一个日志接口标准,无论是log4j2,logback,提供的都是其实现,对开发透明,非常方便的进行插件式管理。这部分需要依赖4个组件,分别是:slf4j-api接口;log4j-api,log4j-core,log4j-slf4j-impl实现
- 服务框架
 
相对于AXIS,AXIS2,CXF已经成为JAVA SOA服务的实际标准,其轻量化的特点深入人心,此外,其与Spring可以更好的结合。
官方网站:http://cxf.apache.org/
为了兼容老项目axis相关包包括:javax.xml.rpc-api, org.apache.axis, commons-discovery, wsdl4j, dom4j
- job框架
 
quartz, http://www.quartz-scheduler.org/
- 测试工具
 
firefox->RESTClient, chrome->boomerang-Soap&REST Client
java调用soap服务(老旧):推荐使用wsimport方式,结合dom4j解析xml。
http://www.cnblogs.com/siqi/archive/2013/12/15/3475222.html, http://www.cnblogs.com/ywjy/p/5196064.html
http://www.blogjava.net/rongxh7/archive/2009/05/21/271982.html
http://www.cnblogs.com/mengdd/archive/2013/06/05/3119927.html
- HttpClient
 
 @RequestMapping("/image/{url}")
     public void getImage(@PathVariable String url, HttpServletResponse response)
             throws ClientProtocolException, IOException {
         String realurl = new String(Base64.decodeBase64(url));
         InputStream instream = FileWSManagerUtil.getImage(realurl);
         OutputStream outputStream = null;
         response.setContentType("image/jpeg");
         try {
             outputStream = response.getOutputStream();
             byte[] buffer = new byte[8192];
             int count;
             while ((count = instream.read(buffer)) > 0) {
                 outputStream.write(buffer, 0, count);
             }
         } finally {
             FileIO.close(outputStream);
             FileIO.close(instream);
         }
     }
 private static InputStream get(String targetURL) {
         HttpGet request = new HttpGet(targetURL);
         request.setHeader("Authorization", "Basic " + authorization);
         try {
             HttpResponse response = HttpClients.createDefault().execute(request);
             if (response.getStatusLine().getStatusCode() == 200)
                 return response.getEntity().getContent();
         } catch (Exception ex) {
             logger.warn("图片获取失败", ex);
         }
         return null;
     }
通常json操作:com.alibaba.fastjson.JSONObject;
对象映射工具:modelmapper
静态代码分析工具:sonarlint,在eclipse中通过http://eclipse.sonarlint.org/ 安装,之后创建对应的server设置好用户名密码即可。
本文所有demo内容请详见:Github中javaDemo项目。
最后,推荐一个知乎问题和一篇赞赞的博文(中文翻译)
目前流行的前端框架有哪些?(完成java学习后,就开始全面的前端学习,基本达到一个互联网工程师的水平再考虑下一步的plan)
Java基础组件快速入门的更多相关文章
- 转: Vue.js——60分钟组件快速入门(上篇)
		
转自: http://www.cnblogs.com/keepfool/p/5625583.html Vue.js——60分钟组件快速入门(上篇) 组件简介 组件系统是Vue.js其中一个重要的概 ...
 - 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建
		
003-PHP基础-01-PHP快速入门 03-PHP环境搭建 1.客户端(浏览器) IE FireFox CHROME Opera Safari 2.服务器 是运行网站的基本 是放置程序代码的地方 ...
 - 【个人笔记】002-PHP基础-01-PHP快速入门-02-PHP语言相关介绍输
		
002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home P ...
 - Java程序员快速入门Go语言
		
这篇文章帮助Java程序员快速入门Go语言. 转载至 开源中国社区. http://www.oschina.net 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将 ...
 - Objective-C基础语法快速入门
		
Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会 ...
 - 【个人笔记】001-PHP基础-01-PHP快速入门-01-PHP职业路线及PHP前景
		
001-PHP基础-01-PHP快速入门 01-PHP职业路线及PHP前景 PHP职业路线 PHP初级工程师 1年以下 3k-6k PHP中级工程师 1-3年6k-10k PHP高级工程师 3年以上 ...
 - Vue.js——60分钟组件快速入门(上篇)
		
组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HTML ...
 - Vue.js——60分钟组件快速入门
		
一.组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HT ...
 - 【转】Vue.js——60分钟组件快速入门(上篇)
		
文章作者:keepfool 文章出处:http://www.cnblogs.com/keepfool/ 组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的 ...
 
随机推荐
- [SDOI2017]硬币游戏
			
考虑生成函数来做 g(x)函数就是0+0*x+...+1*x^s+...+|∑|^(n-s)x^n 就是最后s位必须填这个串,但是前面随便填的方案数 然后枚举之前出现了哪个串(包括自己),如果没有相交 ...
 - 【模板】MST(Kruskal)
			
代码如下 #include <bits/stdc++.h> using namespace std; const int maxv=2e5+10; const int maxe=5e5+1 ...
 - Java: 扩大字节缓存区的大小,提升AIO的处理性能(并发性能)
			
前些日了,对AIO与NIO的并发性能进行了比较,在低并发的情况下,NIO性能表现比AIO好一些,主要原因是,NIO中可以使用FileChannel.transferTo(long position, ...
 - Python内置的操作系统模块(os)与解释器交互模块(sys)
			
Python内置的操作系统模块(os)与解释器交互模块(sys) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本片博客只介绍Python调用操作系统的模块即os模块,以及Pyth ...
 - 怎么使用 JavaScript 将网站后台的数据变化实时更新到前端
			
实时这个工作现在大体有两种方法一.前端不断地向后台轮询请求数据查询的接口(不管你是用AJAX还是什么)然后将返回的数据重绘在页面上,这以前端页面为主动的方式.二.如果浏览器支持Websocket 那么 ...
 - JVM总结(一):概述--JVM对象探秘
			
这一节我们来讨论一下JVM对象建立过程. JVM对象探秘 对象的建立 对象的内存布局 对象的访问定位 JVM对象探秘 对象的建立 对象的建立过程 图一:对象建立过程 1.类加载检查. 当JVM检测 ...
 - JVM调优命令-jstat
			
JVM Statistics Monitoring Tool,是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据.[性能分析] 命令格式 1 ...
 - 关于css中a标签的样式
			
CSS为一些特殊效果准备了特定的工具,我们称之为“伪类”.其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是: :link :visited :hover : ...
 - 2018年5月6日GDCPC (广东赛区)总结
			
试机是队友浩哥一个人去的,因为觉得华工去了不少次了,环境也比较熟悉了.直到看到了现场环境,感觉有些拥挤,不如从前那样宽敞,增加了一些紧张的不适感. 比赛开始时,我们三人分头读题,虽说题目比较简短,但第 ...
 - SQL语句(十四)子查询
			
--1. 使用IN关键字 --例1 查询系别人数不足5人的系别中学生的学号.姓名和系别 --系别人数不足5人的系别 ==>选择条件 select Sdept from Student Group ...