- 浏览: 500371 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
来这里学java:
...
实战篇:设计自己的Annotation -
yushui2000:
突然想到一种方法,就是1、2、2、3、4、5作为5个球(类似彩 ...
一道算法题目,值得一看 -
wst0350:
理解力
实战篇:设计自己的Annotation -
yingzhor:
楼下的,你看看代码不就知道怎么验证了吗?这不是放在sessio ...
利用servlet生成简单的验证码 -
ming_7755:
妙用Commons良药<三>
Annotation在java的世界正铺天盖地展开,有空写这一篇简单的annotations的文章,算是关于Annotation入门的文章吧,希望能各位们能抛砖,共同学习......
不讲废话了,实践才是硬道理.
第一部分:了解一下java1.5起默认的三个annotation类型:
一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
一个是@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
一个是@SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.
如果不清楚上面三个类型的具体用法,各位可以baidu或google一下的,很简单的。
第二部分:讲一下annotation的概念先,再来讲一下怎样设计自己的annotation.
首先在jdk自带的java.lang.annotation包里,打开如下几个源文件:
1、源文件Target.java
其中的@interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface,而不能用class或interface关键字(会不会觉得sun有点吝啬,偏偏搞得与interface这么像).
2、源文件Retention.java
看到这里,大家可能都模糊了,都不知道在说什么,别急,往下看一下.
在上面的文件都用到了RetentionPolicy,ElementType这两个字段,你可能就会猜到这是两个java文件.的确,这两个文件的源代码如下:
3、源文件RetentionPolicy.java
这是一个enum类型,共有三个值,分别是SOURCE,CLASS 和 RUNTIME.
SOURCE代表的是这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面。
ClASS的意思是这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去.注意一下,当你没有设定一个Annotation类型的Retention值时,系统默认值是CLASS.
第三个,是RUNTIME,表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的.
举一个例子,如@Override里面的Retention设为SOURCE,编译成功了就不要这一些检查的信息;相反,@Deprecated里面的Retention设为RUNTIME,表示除了在编译时会警告我们使用了哪个被Deprecated的方法,在执行的时候也可以查出该方法是否被Deprecated.
4、源文件ElementType.java
@Target里面的ElementType是用来指定Annotation类型可以用在哪一些元素上的.说明一下:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造函数),LOCAL_VARIABLE(局部变量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(类型)是指可以用在Class,Interface,Enum和Annotation类型上.
另外,从1的源代码可以看出,@Target自己也用了自己来声明自己,只能用在ANNOTATION_TYPE之上.
如果一个Annotation类型没有指明@Target使用在哪些元素上,那么它可以使用在任何元素之上,这里的元素指的是上面的八种类型.
举几个正确的例子:
@Target(ElementType.METHOD)
@Target(value=ElementType.METHOD)
@Target(ElementType.METHOD,ElementType.CONSTRUCTOR)
具体参考一下javadoc文档
上面一下1和2的源文件,它们都使用了@Documented,@Documented的目的就是让这一个Annotation类型的信息能够显示在javaAPI说明文档上;没有添加的话,使用javadoc生成API文档的时候就会找不到这一个类型生成的信息.
另外一点,如果需要把Annotation的数据继承给子类,那么就会用到@Inherited这一个Annotation类型.
第三部分:下面讲的设计一个最简单的Annotation例子,这一例子共用四个文件;
1、Description.java
说明:所有的Annotation会自动继承java.lang.annotation这一个接口,所以不能再去继承别的类或是接口.
最重要的一点,Annotation类型里面的参数该怎么设定:
第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型.
第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String.
第三,如果只有一个参数成员,最好把参数名称设为"value",后加小括号.例:上面的例子就只有一个参数成员.
2、Name.java
3、JavaEyer.java
4、最后,写一个可以运行提取JavaEyer信息的类TestAnnotation
5、运行结果:
描述:javaeye,做最棒的软件开发交流社区
-----------------
创始人:robbin
创建的社区:javaEye
创始人:江南白衣
创建的社区:springside
这一篇文章写了两个小时有多啦,也算是一篇关于设计自定的Annotation的入门篇啦;另外,特在处声明,如果转载请注明出处:http://lighter.iteye.com。
参考资料:
1、http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html
2、http://caterpillar.onlyfun.net/Gossip/
3、http://calvin.iteye.com/blog/33210
看@Inherited
到目前我只看过,获取annotation的数据要到反射才能提出数据,有没有其他方法不太清楚..
不一定非要用反射来实现,可以ASM来读取,效率也远比反射的效率高,但是ASM使用起来比较繁琐!
为什么说用asm来读取效率高呢?你说的是一次还是多次?
看看Annotation的文档吧!
到目前我只看过,获取annotation的数据要到反射才能提出数据,有没有其他方法不太清楚..
不一定非要用反射来实现,可以ASM来读取,效率也远比反射的效率高,但是ASM使用起来比较繁琐!
看一下开源的主流框架的Annotation设计应该就大有收获啦...
它们也是项目的应用,很多思想可以借鉴一下
你可以下载开源的Appuse来看啊,挻好的一个项目...
开源的项目那么多
但是如果卖就得也开源
不能用了别人代码一声不吭....
而别人自己开发的项目
每份文档都是收费的....
给了你公司倒干净了...
不讲废话了,实践才是硬道理.
第一部分:了解一下java1.5起默认的三个annotation类型:
一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
一个是@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
一个是@SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.
如果不清楚上面三个类型的具体用法,各位可以baidu或google一下的,很简单的。
第二部分:讲一下annotation的概念先,再来讲一下怎样设计自己的annotation.
首先在jdk自带的java.lang.annotation包里,打开如下几个源文件:
1、源文件Target.java
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target { ElementType[] value(); }
其中的@interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface,而不能用class或interface关键字(会不会觉得sun有点吝啬,偏偏搞得与interface这么像).
2、源文件Retention.java
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Retention { RetentionPolicy value(); }
看到这里,大家可能都模糊了,都不知道在说什么,别急,往下看一下.
在上面的文件都用到了RetentionPolicy,ElementType这两个字段,你可能就会猜到这是两个java文件.的确,这两个文件的源代码如下:
3、源文件RetentionPolicy.java
public enum RetentionPolicy { SOURCE, CLASS, RUNTIME }
这是一个enum类型,共有三个值,分别是SOURCE,CLASS 和 RUNTIME.
SOURCE代表的是这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面。
ClASS的意思是这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去.注意一下,当你没有设定一个Annotation类型的Retention值时,系统默认值是CLASS.
第三个,是RUNTIME,表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的.
举一个例子,如@Override里面的Retention设为SOURCE,编译成功了就不要这一些检查的信息;相反,@Deprecated里面的Retention设为RUNTIME,表示除了在编译时会警告我们使用了哪个被Deprecated的方法,在执行的时候也可以查出该方法是否被Deprecated.
4、源文件ElementType.java
public enum ElementType { TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE,PACKAGE }
@Target里面的ElementType是用来指定Annotation类型可以用在哪一些元素上的.说明一下:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造函数),LOCAL_VARIABLE(局部变量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(类型)是指可以用在Class,Interface,Enum和Annotation类型上.
另外,从1的源代码可以看出,@Target自己也用了自己来声明自己,只能用在ANNOTATION_TYPE之上.
如果一个Annotation类型没有指明@Target使用在哪些元素上,那么它可以使用在任何元素之上,这里的元素指的是上面的八种类型.
举几个正确的例子:
@Target(ElementType.METHOD)
@Target(value=ElementType.METHOD)
@Target(ElementType.METHOD,ElementType.CONSTRUCTOR)
具体参考一下javadoc文档
上面一下1和2的源文件,它们都使用了@Documented,@Documented的目的就是让这一个Annotation类型的信息能够显示在javaAPI说明文档上;没有添加的话,使用javadoc生成API文档的时候就会找不到这一个类型生成的信息.
另外一点,如果需要把Annotation的数据继承给子类,那么就会用到@Inherited这一个Annotation类型.
第三部分:下面讲的设计一个最简单的Annotation例子,这一例子共用四个文件;
1、Description.java
package lighter.iteye.com; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Description { String value(); }
说明:所有的Annotation会自动继承java.lang.annotation这一个接口,所以不能再去继承别的类或是接口.
最重要的一点,Annotation类型里面的参数该怎么设定:
第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型.
第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String.
第三,如果只有一个参数成员,最好把参数名称设为"value",后加小括号.例:上面的例子就只有一个参数成员.
2、Name.java
package lighter.iteye.com; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //注意这里的@Target与@Description里的不同,参数成员也不同 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Name { String originate(); String community(); }
3、JavaEyer.java
package lighter.iteye.com; @Description("javaeye,做最棒的软件开发交流社区") public class JavaEyer { @Name(originate="创始人:robbin",community="javaEye") public String getName() { return null; } @Name(originate="创始人:江南白衣",community="springside") public String getName2() { return "借用两位的id一用,写这一个例子,请见谅!"; } }
4、最后,写一个可以运行提取JavaEyer信息的类TestAnnotation
package lighter.iteye.com; import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set; public class TestAnnotation { /** * author lighter * 说明:具体关天Annotation的API的用法请参见javaDoc文档 */ public static void main(String[] args) throws Exception { String CLASS_NAME = "lighter.iteye.com.JavaEyer"; Class test = Class.forName(CLASS_NAME); Method[] method = test.getMethods(); boolean flag = test.isAnnotationPresent(Description.class); if(flag) { Description des = (Description)test.getAnnotation(Description.class); System.out.println("描述:"+des.value()); System.out.println("-----------------"); } //把JavaEyer这一类有利用到@Name的全部方法保存到Set中去 Set<Method> set = new HashSet<Method>(); for(int i=0;i<method.length;i++) { boolean otherFlag = method[i].isAnnotationPresent(Name.class); if(otherFlag) set.add(method[i]); } for(Method m: set) { Name name = m.getAnnotation(Name.class); System.out.println(name.originate()); System.out.println("创建的社区:"+name.community()); } } }
5、运行结果:
描述:javaeye,做最棒的软件开发交流社区
-----------------
创始人:robbin
创建的社区:javaEye
创始人:江南白衣
创建的社区:springside
这一篇文章写了两个小时有多啦,也算是一篇关于设计自定的Annotation的入门篇啦;另外,特在处声明,如果转载请注明出处:http://lighter.iteye.com。
参考资料:
1、http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html
2、http://caterpillar.onlyfun.net/Gossip/
3、http://calvin.iteye.com/blog/33210
评论
30 楼
来这里学java
2012-07-13
29 楼
wst0350
2011-09-03
理解力
28 楼
fantasy
2007-07-03
27 楼
cgc520
2007-07-02
好文章,翻译的不错,组织得也挺到味的,可见作者的水平之高和经验之丰富.值得学习,我现在也在学习这个,我们的项目也用到不少(tapestry4也有很多要用到的,听说T5就更多了,struts2.0也加了这个东东,省去了配置文件.希望annotation能够给我们更好的方便,同是也能得到更多的发展和认同.)
26 楼
myyate
2007-06-08
这才是好文章,写得让人一看就懂。
25 楼
dovecat
2007-04-29
sdyjmc 写道
一个类继承的问题:
如果JavaEyerNew 这个类是继承JavaEyer 这个类那么:
Class test = Class.forName("JavaEyerNew");
boolean flag = test .isAnnotationPresent(Description.class);
flag会返回false。
难道Annotation这种标签(不是@Interface)的使用不具有继承性吗?父类声明的@Description("father")
不能传递到子类中吗?
如果JavaEyerNew 这个类是继承JavaEyer 这个类那么:
Class test = Class.forName("JavaEyerNew");
boolean flag = test .isAnnotationPresent(Description.class);
flag会返回false。
难道Annotation这种标签(不是@Interface)的使用不具有继承性吗?父类声明的@Description("father")
不能传递到子类中吗?
看@Inherited
24 楼
ykxian01
2007-04-29
文章写得很好,不但清楚易懂,而且格式排版也非常讲究,堪称经典!
23 楼
wenjixiao
2007-02-27
谢了。这篇文章写的非常好!
22 楼
penghao122
2007-02-22
不明白!annotation有什么好处啊
21 楼
weiqingfei
2007-02-22
wuyunlong 写道
lighter 写道
Tin 写道
写的很清楚。获取annotation的数据都要用反射么?
到目前我只看过,获取annotation的数据要到反射才能提出数据,有没有其他方法不太清楚..
不一定非要用反射来实现,可以ASM来读取,效率也远比反射的效率高,但是ASM使用起来比较繁琐!
为什么说用asm来读取效率高呢?你说的是一次还是多次?
20 楼
wuyunlong
2007-02-07
sdyjmc 写道
一个类继承的问题:
如果JavaEyerNew 这个类是继承JavaEyer 这个类那么:
Class test = Class.forName("JavaEyerNew");
boolean flag = test .isAnnotationPresent(Description.class);
flag会返回false。
难道Annotation这种标签(不是@Interface)的使用不具有继承性吗?父类声明的@Description("father")
不能传递到子类中吗?
如果JavaEyerNew 这个类是继承JavaEyer 这个类那么:
Class test = Class.forName("JavaEyerNew");
boolean flag = test .isAnnotationPresent(Description.class);
flag会返回false。
难道Annotation这种标签(不是@Interface)的使用不具有继承性吗?父类声明的@Description("father")
不能传递到子类中吗?
看看Annotation的文档吧!
19 楼
wuyunlong
2007-02-07
lighter 写道
Tin 写道
写的很清楚。获取annotation的数据都要用反射么?
到目前我只看过,获取annotation的数据要到反射才能提出数据,有没有其他方法不太清楚..
不一定非要用反射来实现,可以ASM来读取,效率也远比反射的效率高,但是ASM使用起来比较繁琐!
18 楼
sdyjmc
2007-02-05
一个类继承的问题:
如果JavaEyerNew 这个类是继承JavaEyer 这个类那么:
Class test = Class.forName("JavaEyerNew");
boolean flag = test .isAnnotationPresent(Description.class);
flag会返回false。
难道Annotation这种标签(不是@Interface)的使用不具有继承性吗?父类声明的@Description("father")
不能传递到子类中吗?
如果JavaEyerNew 这个类是继承JavaEyer 这个类那么:
Class test = Class.forName("JavaEyerNew");
boolean flag = test .isAnnotationPresent(Description.class);
flag会返回false。
难道Annotation这种标签(不是@Interface)的使用不具有继承性吗?父类声明的@Description("father")
不能传递到子类中吗?
17 楼
jamesby
2007-02-02
受教育啊,还在用1.4中。
16 楼
pro_ygw
2007-02-02
太好啦,真的讲得非常之详尽,学习中......
15 楼
anders0913
2007-01-12
写的很清楚啊,呵呵。
14 楼
lighter
2007-01-07
alin_ass 写道
写的不赖,能不能写写annotation的项目应用呢
看一下开源的主流框架的Annotation设计应该就大有收获啦...
它们也是项目的应用,很多思想可以借鉴一下
13 楼
alin_ass
2007-01-04
写的不赖,能不能写写annotation的项目应用呢
12 楼
lighter
2007-01-03
更新了文章了两个小错误,谢谢网友的指正..
11 楼
抛出异常的爱
2006-12-05
lighter 写道
hxwhappy 写道
老大你有没有好点的j2ee的项目啊,给我一点啊,有文档更好啊
你可以下载开源的Appuse来看啊,挻好的一个项目...
开源的项目那么多
但是如果卖就得也开源
不能用了别人代码一声不吭....
而别人自己开发的项目
每份文档都是收费的....
给了你公司倒干净了...
发表评论
-
读源码之旅 有意思的Integer类
2010-02-01 09:33 2187Integer类里面有如下一段 ... -
读源码之旅 java.io包
2010-01-28 16:11 2320对于下图,研究了一下常用的InputStream,ByteAr ... -
从自身体会谈一谈测试
2008-01-21 13:05 1978论坛上关于测试的帖子 ... -
The Contract for Equality[java]
2008-01-14 20:43 1570As we Know,The Java API documen ... -
来改善你的switch语句
2007-12-26 13:10 2808善用多态来改善你的switch语句 下面举的 ... -
java动态代理笔录
2007-12-22 15:14 2431大家都清楚Spring的AOP方面工作是很优秀,但是其内 ... -
url传递中文参数笔录
2007-12-21 19:35 4274url传递中文参数笔录 ... -
小心给servlet忽悠了
2007-12-05 18:53 2307你真的会写线程安全的s ... -
ThreadLocal浅解
2007-12-01 13:16 2269如果有看到spring的一些源码的同学都知道,Threa ... -
体会Observer/Observable模式
2007-11-23 19:20 3165在现在的项目中,后台有一块程序感觉用Observer/Obse ... -
Java 5.0多线程编程学习资料笔录
2007-11-23 13:33 3836对于Java 5.0多线程编程的学习,可以参考一下网上的下面的 ... -
关于ClassLoader工作机制小记
2007-11-06 23:06 2324类装载器就是寻找类或接口字节文件进行解析并构造JVM内部对象表 ... -
web应用程序开发须注意私自启动线程的问题
2007-11-04 01:25 3228web应用程序开发注意私自启动线程的问题 我们知道静态变量是 ... -
interrupt方法点滴记录
2007-10-25 21:02 28241、sleep方法与interrupt方法 假如线程A像下 ... -
wait方法是在什么时候结束
2007-10-23 11:07 2911wait方法是在什么时候结束 1、当notify方法执行时 ... -
synchronized 笔记
2007-10-18 11:04 2909synchronized 笔记 1、synchronized ... -
该用notify 方法还是notifyAll方法
2007-10-18 10:15 2285选择notify的话,因为要唤醒的线程比较少,程序处理速度当然 ... -
有趣而简单的两段代码
2007-09-04 20:40 2206假如你想写一个小程序,保证字符串首尾两个字符是一样的,你可以如 ... -
正则表达式[浅例学习]
2007-07-17 16:19 2113举下面一段代码: public\\s+void\\s+test ... -
熟悉一下几个常用的eclipse快捷键
2007-07-16 13:03 1882在论坛里看到一个帖子,是Godlikeme在这一个帖子写的 h ...
相关推荐
### Java实战篇:设计自己的Annotation #### 一、Java中的内置Annotation类型介绍 在Java的世界里,Annotation(注解)的应用越来越广泛。本文将重点介绍Java 1.5及以后版本中内置的三种常用注解类型及其应用方式...
### Java实战篇:设计自己的Annotation #### 一、概述 在Java编程中,注解(Annotation)作为一种元数据,能够为代码提供额外的信息,并且在编译时或运行时可以被处理工具读取和利用。自Java 1.5版本引入以来,...
《Java 语言程序设计-进阶篇》是学习Java编程的高级教程,源自原书第10版,针对已经掌握了Java基础知识的读者,深入探讨了Java的高级特性和技术。这本书涵盖了多个关键知识点,旨在帮助开发者提升Java编程技能,...
第5篇 测试及实战 第16章 实战型单元测试 16.1 单元测试概述 16.1.1 为什么需要单元测试 16.1.2 单元测试之误解 16.1.3 单元测试之困境 16.1.4 单元测试基本概念 16.2 JUnit 4快速进阶 16.2.1 JUnit 4概述 16.2.2 ...
第5篇 测试及实战 第16章 实战型单元测试 16.1 单元测试概述 16.1.1 为什么需要单元测试 16.1.2 单元测试之误解 16.1.3 单元测试之困境 16.1.4 单元测试基本概念 16.2 JUnit 4快速进阶 16.2.1 JUnit 4概述 16.2.2 ...
这个压缩包中的499篇文章应该会详细地解释这些知识点,并通过实例代码和实战项目帮助学习者理解和掌握Java编程。对于初学者,可以从基础部分开始,逐步深入;对于有经验的开发者,可以查找特定主题的文章进行深入...
通过学习《王者归来之经典篇—ThinkInJava4Th中文版课后习题答案》,无论是初学者还是经验丰富的开发者,都能从中受益,深化对Java编程的理解,提升实战能力。这份资料不仅提供了问题的答案,更是一个学习和探讨Java...
本篇将通过一个“老板与员工的故事”来深入浅出地解析Dagger2的核心概念和使用方法。 首先,我们来理解一下依赖注入(Dependency Injection,简称DI)的基本思想。在软件设计中,对象之间的依赖关系通常会导致代码...
11. **设计模式**:常见的设计模式如单例、工厂、观察者、装饰者等及其在实际项目中的应用。 这个压缩包不仅包含了理论知识,还附带了代码示例,这对于理解和掌握Java编程至关重要。通过实战练习,你可以更好地消化...
在Android开发中,AOP(Aspect Oriented Programming,面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来。在本篇内容中,我们将深入探讨Android AOP的概念、实现方式以及它在实际...
本篇文章旨在提供一份详尽的JAVA自学指南,根据尚学堂与浪曦视频的学习推荐顺序,帮助初学者高效地掌握JAVA编程技能,避免学习过程中的盲目性和无效努力。通过以下章节的详细介绍,我们将涵盖JAVA学习的基础、进阶...
本篇将详细讲解如何在SpringBoot项目中集成Zookeeper,通过实例代码带你深入理解这一整合过程。 一、Zookeeper基础 Zookeeper是Apache Hadoop的一个子项目,它提供了一种树型的命名空间和分布式同步服务。Zookeeper...
本篇将深入探讨Java的一些关键知识点,旨在帮助开发者提升技能,达到顶尖水平。 1. **并发处理**:Java提供了丰富的并发API,如线程池(ExecutorService)、并发集合(ConcurrentHashMap、CopyOnWriteArrayList)...
mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...
这篇Java实习报告将详细阐述实习过程中的学习与实践经历,以及Java技术在实际项目中的应用。 在实习期间,首先接触的是Java的基础语法,包括数据类型(如基本类型与引用类型)、控制结构(如if语句、for循环、while...