目录
一、注解
注解是用于给Java代码附加元数据,可在编译时或运行时解析并处理这些元数据。但是注解是一种分散式的元数据,与源代码紧绑定。
-
注解的作用:
- 生成文档,通过代码里标识的元数据生成javadoc文档。
- 编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
- 编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
- 运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。
-
注解的分类
- 元注解
元注解是用于定义注解的注解,包括 @Retention、@Target、@Inherited、@Documented。
@Retention用于标明注解被保留的阶段;
@Target用于标明注解使用的范围;
@Inherited用于标明注解可继承;
@Documented用于标明是否生成javadoc文档。 - Java自带的标准注解
@Override,@Deprecated,@SuppressWarnings,用这些注解标明后编译器就会进行检查。
@Override用于标明重写某个方法
@Deprecated标明某个类或方法过时
@SuppressWarnings标明要忽略的警告 - 自定义注解
可以根据自己的需求定义注解,并可用元注解对自定义注解进行注解。
-
示例
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
int id();
String msg();
}
-
注解的优缺点
优点:
- 保存在 class 文件中,降低维护成本。
- 无需工具支持,无需解析。
- 编译期即可验证正确性,查错变得容易。
- 提升开发效率。
缺点:
- 如果需要对于annotation进行修改,那么要重新编译整个工程
- 业务类之间的关系不如XML配置那样容易把握。
- 如果在程序中annotation比较多,直接影响代码质量,对于代码的简洁度有一定的影响
- 配置项编码在 Java 文件中,可扩展性差。
二、XML
XML注释以<! - 和结尾 - >,XML是一种集中式的元数据,与源代码无绑定
-
XML解析方式
-
DOM解析:DOM(Document Object Model),即文档对象模型。在应用程序中,DOM分析器将整个XML文档转换成一颗DOM树放在内存中,通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,这种利用DOM接口的机制也被称作随机访问机制。当文档比较大或者结构比较复杂时,对内存的需求就比较高。对于结构复杂的树的遍历也是一项耗时的操作。
-
SAX解析:与DOM不同,SAX提供的访问模式是一种顺序访问模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。
-
JDOM解析:JDOM方法是根据DOM方法的众多繁琐操作进行包装得到的。
优点:DOM方式的优点:查找方便,可以修改
缺点:DOM方式的缺点:装载整个文档,对内存容量要求高 -
DOM4J解析:Dom4j是目前最流行、最好用的XML解析工具,解析XML的速度最快。DOM4j解析xml的函数上与JDOM差不多,过程都是一样的;但由于底层使用了Xpath等方法加快了索引,所以检索性能更快。
-
XML注解规则
-
注释可以XML声明之前不会出现
-
注释可以出现在文档中的任意位置
-
注释不能在属性值将出现
-
在另一个注释注释不能嵌套
-
示例
<?xml version="1.0" encoding="UTF-8" ?>
<!---Students grades are uploaded by months---->
<class_list>
<student>
<name>Tanmay</name>
<grade>A</grade>
</student>
</class_list>
-
XML注释的优缺点
优点:
- xml作为可扩展标记语言最大的优势在于开发者能够为软件量身定制适用的标记,使代码更加通俗易懂。
- 利用xml配置能使软件更具扩展性。例如Spring将class间的依赖配置在xml中,最大限度地提升应用的可扩展性。
- 具有成熟的验证机制确保程序正确性。利用Schema或DTD可以对xml的正确性进行验证,避免了非法的配置导致应用程序出错。
- 修改配置而无需变动现有程序。
缺点:
- 需要解析工具或类库的支持。
- 解析xml势必会影响应用程序性能,占用系统资源。
- 配置文件过多导致管理变得困难。
- 编译期无法对其配置项的正确性进行验证,或要查错只能在运行期。
- IDE无法验证配置项的正确性无能为力。
- 查错变得困难。往往配置的一个手误导致莫名其妙的错误。
- 开发人员不得不同时维护代码和配置文件,开发效率变得低下。
- 配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。
三、注解与XML注释的使用
-
优先考虑使用注解:
-
类级别的配置
-
一般不会变动的依赖关系,如 service 和对应 dao
- 其他不容易变更的配置
-
优先考虑使用XML
-
第三方的类(只能用配置文件形式)
-
数据库、消息队列、redis 等中间件 或 基础环境依赖 组件配置
-
线程池、定时任务、日志等
-
个性化的项