文档章节

Java注解(Annotation)简单介绍

凡16
 凡16
发布于 2014/09/23 15:32
字数 1529
阅读 33
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

ava注解(Annotation)是通过在java源文件上添加标记字段,然后通过反射的反射在编译或者运行时获取这些标记字段以及其标记目标,然后进行相应处理的方法,曾经风靡一时的XDoclet就是最早的java注解的工作原理说明。使用注解可以进行某些配置,大大减少xml配置文件的书写麻烦,但是也有人认为注解方式不方便理解和维护,因此对于注解VS XML配置文件一直争论不断,个人感觉没有好坏之分,合适就是最好的。

(1).JDK内置注解:

JDK内置了3个注解:

a.      @Override:声明某个方法被重写。

b.      @Deprectated:声明某个方法过时,不推荐使用。

c.      @SuppressWarning({“unchecked”,…….}):告诉编译器对于那些警告信息忽略。

(2).自定义java注解:

Java注解就是一种特殊的接口,自定java注解非常方便,简单例子如下:

@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.CLASS)  
public @interface TestAnnotation{  
String value() default “”;  
}

3).若要想自定义的注解可以被继承,则需要在自定义注解类上加上“@Inherited”注解。

注意和说明:

a. java的注解实际上是自动继承了java.lang.annotation.Annotation接口,因此在自定义注解时不能继承其他的注解或者接口。

b. Retention:告诉编译器如何处理注解,即注解运行在什么时刻。

RetentionPolicy是个枚举类型,有以下三种状态值:

1).SOURCE:该注解存储在源文件中,编译过后即废弃。

2).CLASS:该注解存储在class文件中,是其缺省的值。

3).RUNTIME:该注解存储在class文件中,并且有Java虚拟机读入解析,该类型非常重要,可以使用反射机制获取注解相关信息,可以进行程序分析处理。

c. @Target:指定注解的目标使用对象。

ElementType也是个枚举类型,有以下几种状态值:

1).TYPE:该注解适用于class,interface,enum等类级别的目标对象。

2).FIELD:该注解适用于类中字段级别的目标对象。

3).METHOD:该注解适用于类中方法级别的目标对象。

4).PARAMETER:该注解适用于方法参数级别的目标对象。

5).CONSTRUCTOR:该注解适用于类构造方法。

6).LOCAL_VARIABLE:该注解适用于局部变量。

7).ANNOTATION_TYPE:该注解适用于annotation对象。

8).PACKAGE:该注解适用于package对象。

d.注解里面只能声明属性,不能声明方法,声明属性的方式比较特殊:

语法格式为:数据类型 属性() default 默认值(默认值是可选的); 如:Stringvalue();

使用时,“注解对象(属性=属性值)”为注解指定属性值,通过“注解对象.属性;”就可以得到注解属性的值。

e.注解的解析:使用java反射机制获得注解的目标对象就可以得到注解对象,如:

通过反射得到了注解目标的Field对象field,则通过“field.getAnnotation(注解类.class);”就可以得到注解对象。

9.      基于注解的Spring配置准备条件:

从Spring2.5以后,Spring开始全面支持注解方式配置,所以可以不用写xml配置文件,一样可以使用spring。

(1).使用spring注解方式,必须加入spring注解方式所依赖的jar包:common-annotation.jar。

(2).使用注解方式时,必须在spring配置文件的schema中添加注解的命名空间如下:

xmlns:context=”http://www.springframework.org/schema/context”  
http://www.springframework.org/schema/context  
http://www.springframework.org/schema/context/spring-context-2.5.xsd


(3).在spring配置文件中注册注解处理器:

在spring配置文件中<.bean>元素之前添加:

<
context:annotation-config
>



10.  基于注解的spring配置:

Spring2.5中使用四个注解按功能来进行对bean的配置:

(1).@Component:泛指组件,对于一般不好归类的java Bean使用。

(2).@Service:用于标注配置业务层(service层)组件。

(3).@Controller:用于标注配置控制层的组件(如Struts中的action)。

(4).@Repository:用于标注配置数据访问层组件,即一般的DAO层Bean对象。

注意:对于使用spring注解方式配置的bean对象,bean引用时默认名称为被注解名称的首字母小写形式,也可以指定名称,如:@Service(“userDao“)。

11.   Spring的自动装配:

自动装配的是指不用手动显式配置java Bean之间依赖关系,而是让spring依据某种规则自动将合适的对象注入到目标对象的过程。Spring中常用@Autowire和@Resource来进行自动装配。

(1).@Autowire:默认是按照对象的数据类型进行自动装配的,如

  1. @Autowire  
    private UserDao userDao;

spring框架在运行时会自动将类型为UserDao的对象注入进来。

(2).@Resource:默认是按照名称或者Id进行自动装配的,只有当找不到匹配的名称或者Id时才按类型进行装配,如:

  1. @Resource(name=”userDao”)  
    private UsreDao userDao;

spring框架在运行时会将配置名称或者id为“userDao”的对象注入进来。

注意:@Autowire和@Resource都既可以写在字段上,也可以写在set方法上。

12.   Spring的自动扫描:

Spring自动扫描机制是指,我们使用基于注解的spring配置方式后,spring的配置文件中只需要注册注解处理器,不用显式地配置Bean,当spring在运行时会自动扫描根据给定的条件下类路径中的所有bean,根据注解将它们注入和装配起来并进行初始化的过程。

自动扫描很简单,只需要在spring的配置文件中添加如:

<
context:component-scan
 
base-package
=“要自动扫描的包名“
>



Spring在运行时就可以对指定的包中所有添加了Spring注解的bean自动扫描,注入,装配和初始化。

注意:基于注解的spring配置,自动装配和自动扫描是紧密联系在一起协同工作的,都需要引入context的命名空间。



© 著作权归作者所有

上一篇: java包说明
凡16
粉丝 16
博文 65
码字总数 17120
作品 0
昌平
私信 提问
深入理解注解(Annotation)

在现在的开发中,注解越来越多地应用到了开发中,无论是Servlet3.0新特性,还是SSH中的全注解,都给开发带来了极大的便利, 直观. 因此需要对注解有深入的理解. 一. 自定义注解 自定义注解的目...

长平狐
2012/09/03
333
0
play2.0文档-面向java开发者(6)

Action composition Action组合 This chapter introduces several ways to define generic action functionality. 这章节介绍几个定义通用action功能的方式。 Reminder about actions actio......

老盖
2012/04/12
521
0
注解(Annotation)--注解处理器

如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造...

boonya
2015/04/17
138
0
Java Annotation 简介

本文介绍了Java Annotation相关知识并附有相关的Demo。内容仅供参考使用,有不足之处请及时指出,也欢迎大家交流探讨。 Java Annotation 概述 Java Annotation翻译为Java 注解,注解也称为元...

村头细雨忆流年
2018/08/28
0
0
Java注解(Annotation)详解

Java注解(Annotation)详解 1.Annotation的概念 An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may......

幻海流心
2018/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

thinkphp6 视图变量输出

thinkphp6 视图变量输出 视图默认把变量输出为字符串类型,有些时候需要保证原来的类型,比如html字符串 raw参数,禁止转换 {$content.content|raw} 支持多个参数,比如解码php内置的htmlspe...

DrChenXX
18分钟前
3
0
【搞定Jvm面试】 Java 内存区域揭秘附常见面试题解析

本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb (【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下!...

SnailClimb
28分钟前
3
0
jQuery如何根据数据属性值查找元素?

我有以下场景: var el = 'li'; 页面上有5个<li> ,每个都有一个data-slide=number属性(数字分别为1,2,3,4,5) 。 我现在需要找到当前活动的幻灯片编号,该编号映射到var current = $('ul...

javail
39分钟前
3
0
LaTeX自定义宏包、类文件的默认搜索路径设置方法

  对于自定义的LaTeX宏包与类,在调用时可以通过在命令\documentclass{}与\usepackage{}命令中指定完整路径或者相对路径,这样确实可以调用,但是编译时总是有烦人的警告信息,让人不爽。还...

陆巍_
42分钟前
3
0
计算机电子书 2018 BiliDrive 备份

下载方式 根据你的操作系统下载不同的 BiliDrive 二进制。 执行: bilidrive download <link> 链接 <!--more--> 文档 链接 Webpack 中文指南.epub (409.01 KB) bdrive://ce58b7b58292296a61......

ApacheCN_飞龙
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部