春天里,百花香...
#
摘要: Spring的AOP支持可以被用于從系統(tǒng)核心邏輯中分離交叉業(yè)務(wù)(cross-business)如日志,事務(wù)管理和安全等,使用AOP,你可以用各種功能層來(lái)覆蓋核心業(yè)務(wù)層,這些功能層可以靈活的應(yīng)用到你的系統(tǒng)中,甚至核心業(yè)務(wù)層都不知道它們的存在,這是一個(gè)強(qiáng)大的概念。
AOP(aspect-oriented programming)的核心就是動(dòng)態(tài)代理,掌握它對(duì)于理解AOP尤為重要,猶如反射對(duì)理解IoC一樣。
閱讀全文
摘要: 本文將試圖討論一些決定一個(gè)程序員一生的核心的東西,這是個(gè)人對(duì)程序員生涯的一孔之見(jiàn),只代表作者的個(gè)人想法,其中疏漏甚至錯(cuò)誤之處在所難免,希望大家多提寶貴意見(jiàn)。
前言
豐厚的薪水,高端的職位和有成就感的事業(yè)是人人都想要的,而這些都取決于你每天的認(rèn)真工作,努力學(xué)習(xí)和靈活做人上。日子就像一塊塊磚,你就像是一個(gè)泥瓦匠每天在堆砌著你的人生,最終砌出一個(gè)宏偉的大廈或是一幢低矮的小屋甚至是堆成一堆瓦礫全取決于你自己。
閱讀全文
摘要: 在上文的表單驗(yàn)證解決方案中,有這樣幾個(gè)問(wèn)題:
1。頁(yè)面中存在自定義標(biāo)簽,這通不過(guò)W3C驗(yàn)證。
2。自定義標(biāo)簽不能寫(xiě)在Struts標(biāo)簽中,造成此解決方案在Struts工程中不適用。
3。驗(yàn)證的方式和頁(yè)面內(nèi)容混合在一起,沒(méi)有分開(kāi)。
4。原反饋信息span的id必須符合一定規(guī)范,這是額外的負(fù)擔(dān)。
為了解決這些問(wèn)題,我采取了如下步驟:
1。建立一種數(shù)據(jù)結(jié)構(gòu),讓它容納文本框id,反饋span的id,驗(yàn)證正則表達(dá)式,是否必須輸入等四個(gè)信息。這樣頁(yè)面就不會(huì)混雜自定義標(biāo)簽,w3c驗(yàn)證和struts標(biāo)簽不支持的問(wèn)題就解決了。
2。建立一個(gè)包含多個(gè)這種數(shù)據(jù)結(jié)構(gòu)的數(shù)組,其中元素與要驗(yàn)證的文本域一一對(duì)應(yīng)。此數(shù)組在需要驗(yàn)證時(shí)建立。這里雖然要多些一些JS代碼,但驗(yàn)證信息更集中更容易修改了。
3。需要驗(yàn)證時(shí)取得數(shù)組元素,挨個(gè)驗(yàn)證即可,需要的信息都可以從數(shù)組元素中取得。整個(gè)過(guò)程可以庫(kù)化通用化,頁(yè)面不需要寫(xiě)驗(yàn)證。
如此做完后,我認(rèn)為原先的問(wèn)題基本得到解決了。下面請(qǐng)看具體代碼
閱讀全文
摘要: 對(duì)于實(shí)現(xiàn)文件上傳功能來(lái)說(shuō),Commons-fileupload組件是一個(gè)不錯(cuò)的選擇,本文使用它實(shí)現(xiàn)了單個(gè)文件及多個(gè)文件上傳,這里將實(shí)現(xiàn)過(guò)程寫(xiě)出來(lái)與大家共享。
閱讀全文
摘要: 權(quán)限設(shè)計(jì)是很多系統(tǒng)重要的組成部分,主要用于控制功能和流程,本文將幾種常見(jiàn)的權(quán)限設(shè)計(jì)方案(權(quán)限系統(tǒng)的名都是自己起的)的基本設(shè)計(jì)寫(xiě)出來(lái),其中不恰當(dāng)處還請(qǐng)大家指出,我們來(lái)討論一下.
閱讀全文
下面的方法能解出九宮格,但對(duì)于更高階只有理論可能性,因?yàn)楹臅r(shí)太長(zhǎng),不能作為通用解決方案。
輸出:
2 7 6
9 5 1
4 3 8
package com.sitinspring;
public class SquarePuzzle{
/**
* 階數(shù)
*/
private int n;
/**
* 方陣數(shù)組
*/
private Integer[] arr;
/**
* 平均值
*/
private int average;
public SquarePuzzle(int n){
this.n=n;
// 建立數(shù)組并得到平均值
arr=new Integer[n*n];
average=0;
for(int i=1;i<=n*n;i++){
arr[i-1]=i;
average+=i;
}
average=average/n;
// 遞歸查看
permutation(arr,0,arr.length);
}
private void permutation(Integer[] arr,int start,int end){
if(start<end+1){
permutation(arr,start+1,end);
for(int i=start+1;i<end;i++){
Integer temp;
temp=arr[start];
arr[start]=arr[i];
arr[i]=temp;
permutation(arr,start+1,end);
temp=arr[i];
arr[i]=arr[start];
arr[start]=temp;
}
}
else{
/*for(int i=0;i<end;i++){
System.out.print(arr[i]);
}
System.out.print("\n");*/
int i,sum=0;
for(i=0;i<n;i++){
sum+=arr[i];
}
if(sum!=average){
return;
}
// 查看是否縱橫對(duì)角線值都相等
checkAndPrint(arr);
}
}
private void checkAndPrint(Integer[] arr){
Integer[][] arr2=new Integer[n][n];
int i,j,sum;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
arr2[i][j]=arr[i*n+j];
}
}
// 橫
for(i=0;i<n;i++){
sum=0;
for(j=0;j<n;j++){
sum+=arr2[i][j];
}
if(sum!=average){
return;
}
}
// 縱
for(i=0;i<n;i++){
sum=0;
for(j=0;j<n;j++){
sum+=arr2[j][i];
}
if(sum!=average){
return;
}
}
// 對(duì)角線
sum=0;
for(i=0;i<n;i++){
sum+=arr2[i][i];
}
if(sum!=average){
return;
}
// 對(duì)角線
sum=0;
for(i=0;i<n;i++){
sum+=arr2[i][n-i-1];
}
if(sum!=average){
return;
}
// 最終打印
for(i=0;i<n;i++){
for(j=0;j<n;j++){
System.out.print(arr2[i][j]+"\t");;
}
System.out.print("\n");;
}
System.out.print("\n");;
System.exit(0);
}
public static void main(String[] args){
new SquarePuzzle(3);
}
}
摘要: 本文書(shū)寫(xiě)了使用JFreeChart生成平面餅圖,3D餅圖,折線圖和柱狀圖的示例代碼,并附有代碼下載.
閱讀全文
摘要: 在上一篇“Web頁(yè)面表單域驗(yàn)證方式的改進(jìn)“中,我們通過(guò)把驗(yàn)證法則(正則表達(dá)式和是否必填字段)寫(xiě)在表單域中,將驗(yàn)證過(guò)程和驗(yàn)證法則成功的分離,從而減少了重復(fù)代碼,使驗(yàn)證變得簡(jiǎn)單易行,在實(shí)際使用中,我們可以把驗(yàn)證過(guò)程放在一個(gè)JS文件中,對(duì)于全輸入驗(yàn)證界面,在頁(yè)面的表單驗(yàn)證部分只需要調(diào)用其中的checkForm函數(shù)就能進(jìn)行有效驗(yàn)證,頁(yè)面上不再需要書(shū)寫(xiě)重復(fù)性高的JS驗(yàn)證代碼;對(duì)于復(fù)雜的表單,比如其中含有復(fù)選框或是需要兩個(gè)文本框比較的地方,這種方法也可讓你不寫(xiě)通用驗(yàn)證代碼而把主要精力放在特殊的驗(yàn)證上。這些能減輕不少工作量,讓繁瑣的工作變得輕松愉快起來(lái)。
閱讀全文
sitinspring(http://www.tkk7.com)原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處.