avatar

目录
注解annotation

[toc]

java-注解annotation

概述

JDK5之后出现,和类 接口同级。

格式:@interface 注解名{}

作用:

— 编译检查@overwrite

— 替代配置文件

— 定义注解(元注解:注解上的注解)

— 分析代码(用到反射)

java中的3个注解

@Override:声明该方法是从父类继承过来的,执行编译期的检查。

@Suppresswarnings:抑制警告

@Deprecated:声明该方法不赞成使用

自定义注解

定义

Code
1
2
3
4
5
6
7
8
public @interface MyAnno1{

}

@MyAnno1
public test01(){

}

注解属性

@MyAnno1(“123”)

注解的本质是接口,继承Annotation,接口中可以有常量和抽象方法

抽象方法在注解中称为 注解属性

注解属性类型:

Code
1
2
3
4
5
6
基本类型
String
Class
Annotation
Enum:枚举
以上类型对应的一位数组

注解如果有属性,使用时必须赋值(除非这个属性有默认值)

定义默认值 :String name() default “machine”;

赋值:

@注解名(属性名1=属性值1,属性名2=属性值2)

若注解类型为数组,且只有一个值的时候,有两种写法

Code
1
2
3
4
方式1:
@MyAnno(属性名={值1,值2,值3})
方式2:
@MyAnno(属性名=值)

当属性名为value,且只需为这个属性赋值,value属性名可以省略

元注解

元注解是定义在注解上的注解,有4个元注解
Code
1
2
3
4
5
6
7
8
9
10
@Retention	规定注解保留到什么阶段(生命周期)
SOURCE(默认):只在代码中保留,在字节码文件中就删除了(像@Override一样,只在编译阶段检查异常)
CLASS:在代码和字节码文件中保留
RUNTIME:所有阶段都保留(代替配置文件时)
使用:@Retention(RetentionPolicy.RUNTIME)
@Target 规定注解作用在什么上面
TYPE:作用在类 接口 等 上面
METHOD:作用在方法上面
FIELD:作用在字段上面
使用:@Target(ElementType.METHOD)

获取属性值(反射)

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.itheima.a_annotation.plus;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;

public class JdbcUtils {
@JdbcInfo(url = "jdbc:mysql://localhost:3306/day16",password="1234")
public static Connection getConnection() throws Exception{
//1.获取字节码文件
Class clazz=JdbcUtils.class;

//2.获取getConnenction
Method m = clazz.getMethod("getConnection");

//3.判断该方法上是否有 jdbcinfo注解 若有的话获取
if(m.isAnnotationPresent(JdbcInfo.class)){
JdbcInfo info = m.getAnnotation(JdbcInfo.class);

//4.获取注解四个属性
String driverClass = info.driverClass();
String url = info.url();
String user = info.user();
String password = info.password();

//5.注册驱动
Class.forName(driverClass);

//6.获取连接
return DriverManager.getConnection(url, user, password);
}

return null;
}

public static void main(String[] args) throws Exception {
System.out.println(getConnection());;
}
}
文章作者: Machine
文章链接: https://machine4869.gitee.io/2018/04/18/15326644308973/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哑舍
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论