您的位置:首页 > 编程语言 > Java开发

全面解析Java注解(学习笔记)

2017-04-17 10:34 302 查看

第一章 概述

概念

Java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。


第二章 Java中的常见注解

2-1 JDK中的注解

@Override

@Deprecated

@Suppvisewarnings(“deprecation”)

2-2 Java第三方注解

Spring

@Autowired

@Service

@Repository

Mybatis

@InsertProvider

@UpdateProvider

@Options

第三章 注解的分类

3-1 Java注解的分类

按照运行机制(生命周期)分类

源码注解:注解只在源码中存在,编译成.class文件就不存在了。

编译时注解:注解在源码和.class文件中都存在。(JDK自带的注解)

运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解。(@Autowired)

按照来源分

来自JDK的注解

来自第三方的注解

我们自己定义的注解

元注解(注解的注解)

第四章 自定义注解

4-1 Java自定义注解

语法要求

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description{
String desc();
String author();
int age() default 18;
}


使用@interface关键字定义注解

成员以无参无异常方式声明

可以用default为成员指定一个默认值

成员类型是受限的,合法的类型包括原始类型及String,Class,Annotation,Enumeration

如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)

注解类可以没有成员,没有成员的注解称为标识注解

元注解

@Target({ElementType.METHOD,ElementType.TYPE})

CONSTRUCTOR:构造方法声明

FIELD:字段声明

LOCAL_VARIABLE:局部变量声明

METHOD:方法声明

PACKAGE:包声明

PARAMETER:参数声明

TYPE:类,接口

@Retention(RetentionPolicy.RUNTIME)

SOURCE

CLASS

RUNTIME

@Inherited

允许子类继承。接口继承无效,类继承有效。并且只会集成类上的注解不会继承该类方法上的注解。


@Documented

生成javadoc会包含注解


4-2 使用自定义注解

使用注解的语法

@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>,...)


@Description(desc="I am eyeColor", author="Mooc boy", age=18)
public String eyeColor(){
return "red";
}


4-3 关于自定义注解的代码演示说明

同4-2。


4-4 解析注解

public static void main(String[] args) {
//1.使用类加载器加载类
try {
Class c = Class.forName("com.imooc.annotation.Child");
//2.找到类上面的注解
boolean isExist = c.isAnnotationPresent(Description.class);
if(isExist){
//3.拿到注解实例
Description d = (Description)c.getAnnotation(Description.class);
System.out.println(d.value());
}
//4.找到方法上的注解
Method[] ms = c.getMethods();
for (Method m : ms) {
boolean isMExist = m.isAnnotationPresent(Description.class);
if(isMExist){
Description d = (Description)m.getAnnotation(Description.class);
System.out.println(d.value());
}
}
//另一种解析方法
for (Method m : ms){
Annotation[] as = m.getAnnotations();
for (Annotation a : as){
if (a instanceof Description) {
Description d = (Description)a;
System.out.println(d.value());
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}


第五章 项目实战

5-1 项目需求

项目说明

项目取自一个公司的持久层架构,用来代替Hibernate的解决方案,核心代码就是通过注解来实现的。


需求

有一张用户表,字段包括用户ID,用户名,昵称,年龄,性别,所在城市,邮箱,手机号。

方便的对每个字段或字段的组合条件进行检索,并打印出SQL。

使用方式要足够简单,见代码示例。

5-2 项目实现(上)

代码请参考慕课网。


5-3 项目实现(下)

代码请参考慕课网。


第六章 课程总结

认识注解

注解的作用范围@Target和生命周期@Retention

作用范围:包、类、字段、方法、方法的参数、局部变量

生命周期:源文件SOURCE、编译CLASS、运行RUNTIME

能读懂注解

能在实际项目中用注解解决问题,并能自定义注解

课程链接:http://www.imooc.com/learn/456

转摘自慕课网。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: