注解

JDK自带的注解三个

  1. @Override: 限定重写父类方法, 实现接口方法。该注解只能用于方法
  2. @Deprecated: 用于表示所修饰的元素(类, 方法,构造器等等)已过时。通常是因为所修饰的结构危险或存在更好的选择,过时是可以用的,意义只是作为一种提示,因为原来的项目中用的老的代码必须要能用,过时是给我们后面做开发的提示
  3. @SuppressWarnings: 抑制编译器警告

example

@SuppressWarnings({"unused","rawtypes"})

注解分类

按照运行机制

  1. 源码注解

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

    注解在源码和class文件里都存在(jdk自带注解)

    3.运行时注解

    在运行阶段起作用。影响逻辑的注解,比如@Autowired

按照来源分类

  1. 来及JDK的注解,
  2. 来自第三方的注解
  3. 自己定义的注解

自定义注解的语法要求

1、使用@interface关键字定义注解

2、成员以无参无异方式声明

3、可以defaulit为成员指定一个默认值

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

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

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



元注解

  1. Retention

    决定注解的运行时机,编译时,运行时和源码注解
  2. Target

    注解的使用对象
  3. Inherited

    被使用了注解的父类,子类是否被继承
  4. Document

    是否生成文档







解析注解

概念:通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制运行的逻辑。


/**
* 自定义注解
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface AnnoTest {
String value() default "AnnoTest";
} /**
* 测试类
*/
@AnnoTest("this is class")
public class Person {
@AnnoTest("this is method")
public void test() { }
} /**
* 解析注解
*/
public class Main {
public static void main(String[] args) {
try {
//通过反射获取类
Class c = Class.forName("anno.Son");
//判断是否在类上包含注解
boolean b = c.isAnnotationPresent(AnnoTest.class);
if (b) {
AnnoTest annotation = (AnnoTest) c.getAnnotation(AnnoTest.class);
System.out.println(annotation.value());
}
//获取所有方法
Method[] methods = c.getMethods();
for (Method method : methods) {
//判断在方法上是否包含注解
boolean b1 = method.isAnnotationPresent(AnnoTest.class);
if (b1) {
AnnoTest annotation = method.getAnnotation(AnnoTest.class);
System.out.println(annotation.value());
}
} } catch (Exception e) {
e.printStackTrace();
}
}
}
获取注解的注解

https://segmentfault.com/q/1010000018911081

Spring中的注解

组合注解

springboot中@SpringBootApplication,一个注解包括了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解。


@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@AliasFor(
annotation = EnableAutoConfiguration.class
)
Class<?>[] exclude() default {}; @AliasFor(
annotation = EnableAutoConfiguration.class
)
String[] excludeName() default {}; @AliasFor(
annotation = ComponentScan.class,
attribute = "basePackages"
)
String[] scanBasePackages() default {}; @AliasFor(
annotation = ComponentScan.class,
attribute = "basePackageClasses"
)
Class<?>[] scanBasePackageClasses() default {}; @AliasFor(
annotation = ComponentScan.class,
attribute = "nameGenerator"
)
Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class; @AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
通过@AliasFor实现,@AliasFor是让字段具备父类的功能。
~~~java @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface AliasFor {
@AliasFor("attribute")
String value() default ""; @AliasFor("value")
String attribute() default ""; Class<? extends Annotation> annotation() default Annotation.class;
}
> Class<? extends Annotation> annotation() default Annotation.class;
这里annotation字段即是继承的class。

java 注解开发的更多相关文章

  1. Java注解开发与应用案例

    Java注解开发与应用案例 Annotation(注解)是JDK5.0及以后版本引入的,可以对包.类.属性.方法的描述,给被述对象打上标签,被打上标签后的类.属性.方法将被赋予特殊的“功能”:打个比喻 ...

  2. 使用Java注解开发自动生成SQL

    使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...

  3. 干掉前端!3分钟纯 Java 注解搭个管理系统

    大家好,我是小富~ 最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护 ...

  4. Java自定义注解开发

    一.背景 最近在自己搞一个项目时,遇到可需要开发自定义注解的需求,对于没有怎么关注这些java新特性的来说,比较尴尬,索性就拿出一些时间,来进行研究下自定义注解开发的步骤以及使用方式.今天在这里记下, ...

  5. Java实现自定义注解开发

    Java实现自定义注解开发 一直都对注解开发挺好奇的,最近终于有时间自己实践了一把,记录一下 万一后期会用到呢 哈哈哈 首先我们了解一下自定义注解的标准示例,注解类使用 @interface 关键字修 ...

  6. 【java框架】MyBatis(7)--MyBatis注解开发

    1.MyBatis注解开发 1.1.Lombok的基本使用 Lombok是SpringBoot2.1.X版本与IDEA官方支持的一个插件,它是为简化POJO类中繁杂重复代码:geter/setter/ ...

  7. bean的自动装配,使用注解开发,使用java的方式配置Spring

    bean的自动装配 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种装配的方式 在xml中显示的配置 在java中 ...

  8. Java开发学习(十)----基于注解开发定义bean 已完成

    一.环境准备 先来准备下环境: 创建一个Maven项目 pom.xml添加Spring的依赖 <dependencies>    <dependency>        < ...

  9. Spring使用注解开发及使用java类进行配置bean

    Spring使用注解开发 说明 在spring4之后,想要使用注解形式,必须得要引入aop的包 在配置文件当中,还得要引入一个context约束 <?xml version="1.0& ...

随机推荐

  1. ipa包如何打包?ios打包ipa的四种方法分享

      今天带来的内容是ios打包ipa的四种方法.总结一下,目前.app包转为.ipa包的方法有以下几种,下面一起来看看吧!    1.Apple推荐的方式,即实用xcode的archive功能 Xco ...

  2. FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置

    安装 pip install fastapi[all] pip install unicorn 基本使用(不能同时支持,get, post方法等要分开写) from fastapi import Fa ...

  3. 浅析FMT,CMT, SMT区别

    FMT(fine-grained multithreading)又叫交叉多线程或指令交错多线程 –       每个时钟周期都进行线程的切换,多个线程交替执行,同一个周期只从一个线程发射指令到功能部件 ...

  4. Go:内存管理与内存清理

    Illustration created for "A Journey With Go", made from the original Go Gopher, created by ...

  5. Qt实现的多菜单选择界面

    文章目录 1.效果展示 2.实现代码 2.1 菜单实现代码 2.1.1 头文件 2.1.2 源文件 2.2 应用代码 1.效果展示 这种菜单样式比较常用,实现的方法也有很多种,比如可以直接使用QTab ...

  6. springboot多环境配置文件

    一.关于springboot的配置文件 springboot的配置文件主要有两种:properties文件和yml文件,我们只要选择一种使用就可以了.我们通过properties文件介绍一下配置的方式 ...

  7. 打开终端自动source .bashrc文件

    vim ~/.bash_profile在文件内部输入 if test -f .bashrc ; then source .bashrc fi 就再也不用手动source了

  8. 第一个Mybatis

    第一个Mybatis 思路:搭建环境-->导入Mybatis-->编写代码-->测试 1.搭建环境 新建maven工程,配置xml文件 <?xml version=" ...

  9. windows10永久激活工具 新版win10激活工具(绝对有效的永久激活工具)

    来看这篇文章的,都用过KMS了吧?对!KMS是批量激活的,激活时间是一年,如果给女神激活,此法首选呀!!!但是帮基友激活,过了一年又来找自己,作为程序员的你,脸上是不是有点挂不住然后又不想花钱去买某宝 ...

  10. JS 时间获取 (常用)

    /** * 获取几天之前日期 */ daysAgo(dayNum = 0) { let myDate = new Date() let lw = new Date(myDate - 1000 * 60 ...