A. ComponentScan註解的掃描范圍及源碼解析
一,ComponentScan註解的默認掃描范圍
ComponentScan註解的默認掃描范圍是啟動程序XxxApplication. java所在目錄及其下的所有子包。
為了方便理解,我們看一下下面這個圖片。
這個項目中的啟動類是:SpringbootApplication.java
該啟動類所在的目錄是:springboot
那麼ComponentScan註解的默認掃描范圍是:springboot目錄及其下面的所有子包。
二,如何修改ComponentScan註解的掃描范圍
ComponentScan註解即可以掃描包,也可以掃描指定的類。我們只需要指定一個包掃描的路徑,就可以實現更改包掃描路徑的功能了。
1,ComponentScan註解念大州掃描包。
@ComponentScan({"com.company.user","com.company.service"})
2,ComponentScan註解掃描類。
@ComponentScan(basePackageClasses={XxxService.class})
三,ComponentScan註解
ComponentScan註解中定義了12個屬性,我們下面詳細來看一下。我們的討論是基於java8的,spring-context的版本是4.3.7。
1,String[] value() default {};
指定包掃描路徑,value屬性的值,就是項目中的一個具體路徑。value屬性的類型是String數組,也就是支持一次指定多個包掃描路徑。這個屬性上面添加了一個註解,@AliasFor("basePackages"),這個註解的意思就是說,value這個屬性等價於basePackages屬性。關於basePackages屬性,下面會講到仔蔽。
2,String[] basePackages() default {};
指定包掃描路徑,basePackages屬性的值,就是項目中的一個具體路徑。basePackages屬性的類型是String數組,也就是支仿毀持一次指定多個包掃描路徑。basePackages屬性上面添加了一個註解,@AliasFor("value"),這個註解的意思就是說,basePackages這個屬性等價於value屬性。
3,Class<?>[] basePackagesClasses() default {};
掃描具體的類。basePackagesClasses屬性的類型是Class數組,也就是說支持同時指定多個掃描類。
4,Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator. class;
配置beanName生成器,默認是BeanNameGenerator。一般情況下,我們都是使用默認的beanName生成器,但是Spring實現了beanName生成器的可配置。
5,Class<? extends ScopeMetaDataResolver> scopeResolver() default .class;
處理檢測到的bean的scope范圍。什麼意思呢?我們都知道spring的bean是有作用域的,默認是singleton,這個默認值就是在ScopeMetaData類中指定的:
private String scopeName = "singleton";
這個屬性也是可選配置,默認的處理bean作用域的實現類是.class。源碼比較簡單,就是取註解上獲取指定的scope的value值,如果沒有配置,就是用默認的singleton。
6,ScopedProxyMode scopedProxy() default ScopedProxyMode. DEFAULT;
是否為檢測到的組件生成代理。
ScopedProxyMode是一個枚舉類,可選值有四個:DEFAULT,NO,INTERFACES,TARGET_CLASS。
7,String resourcePattern() default """**/*.class";
控制符合組件檢測條件的類文件,默認是包掃描下的 **/*.class。
8,boolean useDefaultFilters() default true;
是否對含有以下註解的類開啟檢測,默認是開啟的。
@Component
@Repository
@Service
@Controller
9,ComponentScan.Filter[] includeFilters() default {};
指定某些Filter掃描到的類。聽起來有些費勁,說白了就是指定了類型,掃描指定的這些類型。可選類型有5種,定義在枚舉類FilterType中:
第一種:ANNOTATION
第二種:ASSIGNABLE_TYPE
第三種:ASPECTJ
第四種:REGEX,正則表達式。
第五種:CUSTOM,自定義類型。
10,ComponentScan.Filter[] excludeFilters() default {};
排除過濾器掃描的的類。
11,boolean lazyInit() default false;
掃描到的類是否開啟懶載入,默認不開啟。
12,
@Retention(RetentionPolicy.RUNTIME);
@Target({})
public @interface Filter {
FilterType type() default FilterType. ANNOTATION;
@AliasFor("classes")
Class<?>[] value() default {};
@AliasFor("value")
Class<?>[] classes() default {};
String[] pattern() default {};
}
B. JAVA 數字水印 小程序(給圖片打上水印或檢測水印),求發個源碼謝謝
packagecom.aspectj;
importjava.awt.Color;
importjava.awt.Graphics2D;
importjava.awt.Image;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.FileOutputStream;
importjavax.swing.ImageIcon;
importcom.sun.image.codec.jpeg.JPEGCodec;
importcom.sun.image.codec.jpeg.JPEGEncodeParam;
importcom.sun.image.codec.jpeg.JPEGImageEncoder;
/**
*@authorAdministrator
*
*TODO要更改此生成的類型注釋的模板,請轉至窗口-首選項-Java-代碼樣式-代碼模板
*
*添加水印,filePath源圖片路徑含圖片名,watermark水印圖片路徑savePath
*為你添加水印後的圖片保存路徑文件夾words要添加的文字
*/
//添加水印,filePath源圖片路徑,watermark水印圖片路徑
publicclassMark{
privatestaticintwid=0;
privatestaticinthet=0;
publicstaticbooleancreateMark(StringfilePath,Stringwatermark,
Stringwords,StringsavePath){
ImageIconimgIcon=newImageIcon(filePath);
ImagetheImg=imgIcon.getImage();
ImageIconwaterIcon=newImageIcon(watermark);
ImagewaterImg=waterIcon.getImage();
///////////////////////////////////////////////////////////////////////
Filef=newFile(filePath);
Stringpicname=f.getName();//取得圖片名
if(watermark!=null&&!watermark.equals("")){//當水印圖標為空時
ImageIconmarkIcon=newImageIcon(watermark);//要添加的水印圖標
ImagemarkImg=markIcon.getImage();
wid=markImg.getWidth(null);//水印圖標寬度
het=markImg.getHeight(null);//水印圖標高度
}
//////////////////////////////////////////////////////////////////////
intwidth=theImg.getWidth(null);//源圖片寬度
intheight=theImg.getHeight(null);//源圖片高度
if(savePath.equals(""))
savePath=filePath;//如果未指定保存路徑則保存回原路徑
else
savePath=savePath+"指定保存文件夾時,拼接出保存路徑";
BufferedImagebimage=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
Graphics2Dg=bimage.createGraphics();
g.setColor(Color.red);//設置顏色
g.setBackground(Color.white);
g.drawImage(theImg,0,0,null);
g.drawImage(waterImg,width-wid+5,height-het+5,null);//添加圖標中間兩個數字參數
//是設定位置
g.drawString(words,width-120,height-10);//添加文字
try{
FileOutputStreamout=newFileOutputStream(savePath);
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParamparam=encoder.getDefaultJPEGEncodeParam(bimage);
param.setQuality(50f,true);//圖片質量
encoder.encode(bimage,param);
out.close();
}catch(Exceptione){
e.printStackTrace();
System.out.println("===========水印失敗");
returnfalse;
}finally{
System.gc();//清理垃圾對象
}
System.out.println("===========水印成功");
returntrue;
}
///測試主程序
publicstaticvoidmain(String[]args){
createMark(".jpg","u=4038692558,3024950167&fm=21&gp=0.jpg","aas","");
}
}
檢測水印很難做到,但是加上水印還是比較簡單的
C. 誰告訴我 網站源碼 用什麼軟體容易編輯 本人0基礎
總結起來就是三劍客dreamweaver網頁製作排版+photoshop製作模板切片和美化圖片+flash製作網頁多元化的flash。不過現在市場上還有比較多的網站源碼編輯軟體或工具,主要有以下,可供參考:
1.SublimeText
Sublime Text2是一款跨平台的編輯器,再也不用為換平台而找不到合適的、熟悉的編輯器擔憂了。
Sublime Text2 是一款具有代碼高亮、語法提示、自動完成且反應快速的編輯器軟體,不僅具有華麗的界面,還支持插件擴展機制,用她來寫代碼,絕對是一種享受。
Sublime Text 2的特色功能:
良好的擴展功能,官方稱之為安裝包(Package)。
右邊沒有滾動條,取而代之的是代碼縮略圖,這個功能非常贊
強大的快捷命令「可以實時搜索到相應的命令、選項、snippet 和 syntex, 按下回車就可以直接執行,減少了查找的麻煩。」
即時的文件切換。
隨心所欲的跳轉到任意文件的任意位置。
多重選擇(Multi-Selection)功能允許在頁面中同時存在多個游標。
支持 VIM 模式
支持宏,簡單地說就是把操作錄制下來或者自己編寫命令,然後播放剛才錄制的操作或者命令。
更新非常勤快
2.TopStyle5
TopStyle是一款 CSS 開發輔助工具,即 HTML5 / CSS3 編輯器,它專注於 HTML CSS 設計輔助,提供比較多的功能,如 CSS 代碼檢查等,據稱 TopStyle 的幫助文件非常好,有詳細的 CSS 指令,適於初次接觸 CSS 的學習之用。
不過如果你想對 CSS 了如指掌,對 CSS 網頁布局非常熟練,還是扔掉一切輔助軟體,用記事本開發,而熟練 CSS 之後,再使用此類輔助軟體,可以提高工作效率和開發速度。
TopStyle 5 在 CSS3 / HTML5 方面的增強:
CSS3 for Inspector, Insight and Style Checker
Prefixr
CSS3 Media Queries
CSS Gradient Generator
Text Shadow Generator
Improved options for Preview Files (CSS-only)
HTML5 for Inspector and Insight
HTML5-only Validator
HTML Structure Panel
Wrap HTML Tag
Image Map Editor (HTML-only)
3.Chocolat
Chocolat是Mac系統上最新出現的一款強大的文本編輯器,兼具原生的Cocoa及強大的文本編輯功能。
Chocolat支持多種編程語言的關鍵字高亮顯示、窗口分割、標簽頁、色彩主題等功能,界面和MacVim非常相似。
4.Aptana
Aptana 是一個非常強大,開源,專注於JavaScript的Ajax開發IDE。
它的特性包括:
JavaScript,JavaScript函數,HTML,CSS語言的Code Assist功能。
Outliner(大綱):顯示JavaScript,HTML和CSS的代碼結構。
支持JavaScript,HTML,CSS代碼提示,包括JavaScript 自定函數
代碼語法錯誤提示。
支持Aptana UI自定義和擴展。
支持跨平台。
支持FTP/SFTP
調試JavaScript
支持流行AJAX框架的Code Assist功能:AFLAX,Dojo,JQuery,MochiKit,Prototype,Rico,script.aculo.us,Yahoo UI,Ext。
Adobe AIR與iPhone開發工具
5.KomodoIDE
Komodo 是一個跨平台支持多種程序語言的Integrated Development Environment (IDE)軟體,目前他支持了在Windows與Linux上 ,Pythone, Ruby, Rails, Perl, HTML, CSS, and JavaScript,等的程序語言開發,以及多種程序語言語法著色。
6.Eclipse
Eclipse是著名的跨平台的自由集成開發環境(IDE)。最初主要用來Java語言開發,但是目前亦有人通過插件使其作為其他計算機語言比如C++和Python的開發工具。
Eclipse的本身只是一個框架平台,但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟體很難具有的靈活性。許多軟體開發商以Eclipse為框架開發自己的IDE。
Eclipse的基礎是富客戶機平台(Rich Client Platform, 即RCP)。RCP包括下列組件:
核心平台(啟動Eclipse,運行插件)
OSGi(標准集束框架)
SWT(可移植構件工具包)
JFace(文件緩沖,文本處理,文本編輯器)
Eclipse工作台(即Workbench ,包含視圖(views)、編輯器(editors)、視角(perspectives)、和向導(wizards))
Eclipse採用的技術是IBM公司開發的(SWT),這是一種基於Java的窗口組件,類似Java本身提供的AWT和Swing窗口組件;不過IBM聲稱SWT比其他Java窗口組件更有效率。Eclipse的用戶界面還使用了GUI中間層JFace,從而簡化了基於SWT的應用程序的構建。
Eclipse的插件機制是輕型軟體組件化架構。在富客戶機平台上,Eclipse使用插件來提供所有的附加功能,例如支持Java以外的其他語 言。 已有的分離的插件已經能夠支持C/C++(CDT)、Perl、Ruby,Python、telnet和資料庫開發。插件架構能夠支持將任意的擴展加入到 現有環境中,例如配置管理,而決不僅僅限於支持各種編程語言。
Eclipse的設計思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加於Eclipse核心之上。Eclipse基本內核包括:圖形API (SWT/Jface), Java開發環境插件(JDT ),插件開發環境(PDE)等。
Eclipse由各種不同的計劃組成。以下列出了部分計劃。
Eclipse計劃:本身包括Eclipse平台,Eclipse富客戶端平台(RCP)和Java開發工具(JDT)。
Eclipse測試和性能工具平台(TPTP):提供一個允許軟體開發者構建諸如測試調試、概況分析、基準評測等測試和性能工具的平台。
Eclipse Web工具平台計劃(WTP):用Java企業版Web應用程序開發工具來擴展Eclipse平台。它由以下部分組成:HTML、JavaScript、CSS、JSP、SQL、XML、DTD、XSD和 WSDL的 源代碼編輯器;XSD和WSDL的圖形界面編輯器;Java企業版的「項目性質」(project nature)、建構器(builder)和模型(model),與一個Java企業版的導航(navigator);一個Web服務(Web service)向導和瀏覽器,還有一個WS-I測試工具;最後是資料庫訪問查詢的工具與模型。
Eclipse商業智能和報表工具計劃(BIRT):提供Web應用程序(特別是基於Java企業版的)的報表開發工具。
Eclipse可視化界面編輯器計劃(VEP):一個Eclipse下創建圖形用戶界面代碼生成器的框架。
Eclipse建模框架(EMF):依據使用XMI描述的建模規格,生成結構化數據模型的工具和其他應用程序的代碼。
圖形化編輯器框架(GEF):能讓開發者採用一個現成的應用程序模型來輕松地創建富圖形化編輯器。
UML2:Eclipse平台下的一個UML 2.0元模型的實現,用以支持建模工具的開發。
AspectJ:一種針對Java的面向側面語言擴展。
Eclipse通訊框架(ECF):專注於在Eclipse平台上創建通訊應用程序的工作。
Eclipse數據工具平台計劃(DTP)
Eclipse設備驅動軟體開發計劃(DSDP)
C/C++開發工具計劃(CDT):努力為Eclipse平台提供一個全功能C和C++的集成開發環境(IDE),它使用GCC作為編譯器。
Eclipse平台COBOL集成開發環境子計劃(COBOL):將構建一個Eclipse平台上的全功能COBOL集成開發環境。
並行工具平台(PTP):將開發一個對並行計算機架構下的一組工具進行集成的平行工具平台,而且這個平台是可移植的,可伸縮的並基於標準的。
嵌入式富客戶端平台(eRCP):計劃將Eclipse富客戶端平台擴展到嵌入式設備上。這個平台主要是一個富客戶端平台(RCP)組件子集的集合。它能讓桌面環境下的應用程序模型能夠大致同樣地能運用在嵌入式設備上。