標籤:style end result simple jms 代碼 shc 項目開發 前端架構
最近需要上線很多新的JAVA項目,然而很多JAVA的相關庫都不太熟悉,項目實現起來遇到了不小阻力,熬了好幾天夜。現在手頭的工作基本完成了,因此打算好好來歸納下java的相關工具庫,將來需要藉助你們,好好的在JAVA的汪洋下,乘風破浪。(希望成為電影中如小馬一樣程式員J)
乘風破浪會有時,直掛雲帆濟蒼海—李白
首先通過一張思維導圖,來熟悉常用的java基礎工具包,掌握好工具是對一個優秀工程師的基本要求哦!J
圖中標紅星表示必須精通的內容,黃星為需要熟練掌握的內容,其他為補充內容,本文主要會介紹下基礎庫、架構庫和log庫的內容。
雖然現在推薦使用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,共用多個對象。
|
功能 |
樣本 |
|
複寫常用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)的技術實踐
ImmutableList<String> imlist=ImmutableList.copyOf(list);
常見集合Colletion,List,Set,SortedSet,Map,SortedMap都有其對應類型 |
|
其他 |
Strings. Range, EventBus, Caches, null值的管理(java的一個痛點) |
Guava官方教程的中文翻譯:http://ifeve.com/google-guava/
這部分是後來補上的,在.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
其是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,提供的都是其實現,對開發透明,非常方便的進行外掛程式式管理。
本文所有demo內容請詳見:Github中javaDemo項目。
最後,推薦一個知乎問題和一篇贊贊的博文(中文翻譯)
目前流行的前端架構有哪些?(完成java學習後,就開始全面的前端學習,基本達到一個互連網工程師的水平再考慮下一步的plan)
2017 年你應該學習的程式設計語言、架構和工具
Java開發—乘風破浪