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)组件子集的集合。它能让桌面环境下的应用程序模型能够大致同样地能运用在嵌入式设备上。