Time of Update: 2018-12-03
在上篇博文中,我向大家介紹了Aop重要概念和教程,這回給出程式碼範例。一、XML方式1. TestAspect:切面類package com.spring.aop;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;public class TestAspect {public void doAfter(JoinPoint jp) {System.out.println("log
Time of Update: 2018-12-03
說到字串比較,大家都知道,但你真的知道如何比較才是最正確的嗎?不知道的人,幾乎都是用以下方法來比較的String str = nullif (str == null || str.equals("")) {}這實際上是效率最低的,正確的做法是:String str = null;if (str == null || str.isEmpty()) {}但上述方法需要jdk在1.6以上,那麼也可以用:String str = null;if (str == null || str.length()
Time of Update: 2018-12-03
這兩者有些人很容易搞混,因此我在這裡詳細講述下。replace的參數是char和CharSequence,即可以支援字元的替換,也支援字串的替換(CharSequence即字串序列的意思,說白了也就是字串);replaceAll的參數是regex,即基於規則運算式的替換,比如:可以通過replaceAll("\\d",
Time of Update: 2018-12-03
在項目過程中,我們有時經常喜歡用靜態變數(static)來緩衝一些不便的公用資料,但是這麼做有一點需要注意:靜態變數的保護。由於一些因素(比如查詢資料庫),我們無法對靜態變數加上final屬性,因此如果靜態變數暴漏後,如果有對靜態變數寫操作(即修改變數)的話,很可能會引起意想不到的錯誤。當然平時我們用緩衝幾乎都是讀取操作,所以這個問題不容易引起我們的注意。例子說明:package test;import java.util.ArrayList;import java.util.Iterator;
Time of Update: 2018-12-03
我們繼續介紹hibernate註解的相關內容1. OneToOne懶載入問題一對一註解時,若採用外鍵列進行實體的關聯的話,懶載入問題是需要注意下的。如下:Student表:id int not nullname varchar(50) not nullcard_id int not nullCard表:id int not nullcard_no varchar() not nullStudent類public class Student {private int
Time of Update: 2018-12-03
這本來是一個簡單的問題,但是在網上查閱了半天也沒找到結果,最後閱讀官方文檔後,終於找到了方法。其實非常簡單,只需要在介面方法參數上加上@Param註解。另外如果需要傳遞多個參數時,可以使用該註解來實現。例子:public List<Teacher> selectTeacher(@Param(value="id") String id, @Param(value="sex") String sex, @Param(value="createTime") Date createTime)
Time of Update: 2018-12-03
spring作為一個開源架構,對國際化自然提供了支援。說到國際化,有些人認為用處不大,那是因為僅僅從語言的角度考慮的。確實,如果僅簡體中文就夠了的話,沒必要用國際化,但國際化另一特點特對我們來說非常有用。那就是提示資訊的統一管理。我們可以將所有提示都統一寫在國際化資源檔裡,而且它還支援動態傳入參數,即可以寫一個提示模板,根據參數動態產生提示。這樣不但可以避免因為代碼檔案編碼的原因造成的亂碼,還能在修改後直接起效而不用重啟項目或重新編譯,改起來也很方便。優點很多,真要說缺點,可能就是效能沒有直接寫
Time of Update: 2018-12-03
一、Findbugs1. 配置1.1 開啟FindBugs視圖:Windows => Show View => Other… => FindBugs => Bug Info 、Bug Explorer、Bug Reviews1.2 配置FindBugs選擇你的項目=>右鍵 => Properties => FindBugs => 選中“Run automatically” => OKFindbugs各項屬性的配置說明:Enable
Time of Update: 2018-12-03
在Spring Aop執行個體的文章中,我向大家介紹了Spring Aop的相關知識,今天我進一步細化下Aop中異常處理的相關知識。public void doThrowing(JoinPoint jp, Throwable ex) {System.out.println("method " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName() + " throw exception");System.
Time of Update: 2018-12-03
偶然間發現HQL一個非常有意思的用法,拿來分享下。樣本如下:1. student資料庫表(MySQL)CREATE TABLE `student` ( `ID` int(11) NOT NULL, `NAMES` varchar(50) NOT NULL, `AGE` int(3) NOT NULL, PRIMARY KEY (`ID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;表中資料IDNAMESAGE1王鵬242張三122.
Time of Update: 2018-12-03
幾乎所有程式員都聽說過Junit的大名,但不知真正懂得運用它的人有多少,我便是其中的一個小白。知道Junit是用來測試的,但卻把“寶刀”當成了“菜刀”用。為了從此不再菜鳥,特此總結整理了下Junit的知識點。一、建立Junit測試類別1. 右擊test測試包,選擇New-->Oher... 2. 在視窗中找到Junit,選擇Junit Test Case3. 輸入名稱(Name),命名規則一般建議採用:類名+Test。Browse...選擇要測試的類,這裡是StudentService。4
Time of Update: 2018-12-03
二、核心——斷言斷言是編寫測試案例的核心實現方式,即期望值是多少,測試的結果是多少,以此來判斷測試是否通過。1. 斷言核心方法assertArrayEquals(expecteds, actuals)查看兩個數組是否相等。assertEquals(expected, actual)查看兩個對象是否相等。類似於字串比較使用的equals()方法assertNotEquals(first,
Time of Update: 2018-12-03
四、執行個體總結1. 參數化測試有時一個測試方法,不同的參數值會產生不同的結果,那麼我們為了測試全面,會把多個參數值都寫出來並一一斷言測試,這樣有時難免費時費力,這是我們便可以採用參數化測試來解決這個問題。參數化測試就好比把一個“輸入值,期望值”的集合傳入給測試方法,達到一次性測試的目的。package test;import static org.junit.Assert.*;import java.util.Arrays;import org.junit.Test;import
Time of Update: 2018-12-03
一、會用Spring測試套件的好處在開發基於Spring的應用時,如果你還直接使用Junit進行單元測試,那你就錯過了Spring為我們所提供的饕餮大餐了。使用Junit直接進行單元測試有以下四大不足:1)導致多次Spring容器初始化問題根據JUnit測試方法的調用流程,每執行一個測試方法都會建立一個測試案例的執行個體並調用setUp()方法。由於一般情況下,我們在setUp()方法中初始化Spring容器,這意味著如果測試案例有多少個測試方法,Spring容器就會被重複初始化多次。雖然初始化
Time of Update: 2018-12-03
This section presents the mark-and-sweep garbage collection algorithm. The mark-and-sweep algorithm was the first garbage collection algorithm to be developed that is able to reclaim cyclic data structures. Variations of the mark-and-sweep
Time of Update: 2018-12-03
Maven簡介Maven是一個專案管理工具,它包含了一個項目物件模型(Project Object Model),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management
Time of Update: 2018-12-03
.net架構下的事件和委託理解起來比較困難,特別是委託這個特殊的類型學習起來總是要花點時間。下面結合Observer模式做了一個簡單的例子,希望對初學者有協助。首先建一個控制台應用程式。代碼如下 :Program.cs:using System;using System.Collections.Generic;using System.Text;namespace ObserverPattern{ /// <summary> ///
Time of Update: 2018-12-03
在.NET2.0中,新加了一個類:ClientScriptManager,該類讓我們可以在伺服器端編寫用戶端指令碼,而在執行的時候不用回傳。一個典型的小例子://伺服器端控制項,調用用戶端指令碼 if (Request.Browser.SupportsCallback)//驗證瀏覽器是否支援 { //不用回傳的用戶端指令碼,參數1是指令碼的類型,參數2是指令碼的關鍵字(用來區分),參數3是執行的指令碼內容
Time of Update: 2018-12-03
一、概念AOP(Aspect Oriented Programming):面向切面編程。面向切面編程(也叫面向方面編程),是目前軟體開發中的一個熱點,也是Spring架構中的一個重要內容。利用AOP可以對商務邏輯的各個部分進行隔離,從而使得商務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。二、用途日誌記錄,效能統計,安全控制,許可權管理,交易處理,異常處理,資源集區管理。三、詳解注意:代碼請見下篇博文1.
Time of Update: 2018-12-03
sql語句有一種特別的用法,相信很多人還不知道,我也是後來學到的,因此拿來跟大家分享下:產生sql指令碼舉個例子:select 1 from student;如果表中有資料的話,你就會發現查詢的結果會是:根據這個原理,我們可以用來產生sql指令碼,以下就是執行個體:執行個體1:一個簡單的例子select * from Popedomselect 'insert intoPopedom(id,popedom_name,popedom_value) values('+cast(id as