spring框架注解多?注解到底是个什么东西?这篇文章给你讲明白
目录
什么是注解
内置注解:
元注解:
自定义注解:
什么是注解
内置注解:
@Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。
@Deprecated:定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。
@SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息,与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好的:@SuppressWarnings("all")、@SuppressWarnings("unchecked")、@SuppressWarnings(value={"unchecked","deprecation"})等等。
//内置注解
public class Test01 {@Override//方法重写的注解public String toString() {return super.toString();}@Deprecated//该注解注释的方法不推荐程序员使用,但是可以用,或者存在其他更好的方式public static void test01(){System.out.println("这是测试");}@SuppressWarnings("all")//该注解注释的方法、类中不会出现警告public void test02(){String a = "测试a";}public static void main(String[] args) {test01();//被@Deprecated注解的方法调用时会有删除线,但是依然可以用。}
}
元注解:
@Target:注解的作用目标
@Target(ElementType.TYPE) //接口、类、枚举
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)
@Retention:注解的保留位置
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Document:说明该注解将被包含在javadoc中。
@Inherited:说明子类可以继承父类中的该注解。
import java.lang.annotation.*;//测试元注解
public class Test02 {@MyAnnotationpublic void test01(){}
}//定义一个注解
//@Target表示注解可以用在什么地方,ElementType.METHOD表示可用在方法上,可以传递一个数组
@Target(value = {ElementType.METHOD, ElementType.TYPE})
//@Retention表示注解在什么地方才有效,一般都写RetentionPolicy.RUNTIME,运行时都有效;RUNTIME>CLASS>SOURCE
@Retention(value = RetentionPolicy.RUNTIME)
//@Documented 表示是否将我们的注解生成在javaDOC中。
@Documented
//@Inherited子类可以继承父类的注解
@Inherited
@interface MyAnnotation{
}
自定义注解:
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。
分析:
@interface用来声明一个注解,格式:public @interface 注解明{定义内容}
其中的每一个方法实际上是声明了一个配置参数。
方法的名称就是参数的名称。
返回值类型就是参数的类型(返回值只能是基本类型,Class,String。enum)。
可以通过default来声明参数的默认值。
如果只有一个参数成员,一般参数名为value。
注解元素必须要有值,我们定义注解元素时,经常使用空字符串、0作为默认值。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;//自定义注解
public class Test03 {//@MyAnno2(name = "奇怪的大冒险o") 注解可以显式赋值,如果没有默认值,必须给注解赋值@MyAnno2(name = "奇怪的大冒险o", schools = {"清华", "北大"})public void test1(){}@MyAnno3("测试")//如果参数为value的时候,可以省略valuepublic void test2(){}
}@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno2{//注解的参数,参数类型 参数名();String name() default "";int age() default 0;int id() default -1;//如果默认值为-1,代表不存在,就像indexof如果找不到就返回-1。String[] schools();
}@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno3{//只有一个参数,建议用value命名String value() default "";
}
spring框架注解多?注解到底是个什么东西?这篇文章给你讲明白相关推荐
- 看完这篇文章之后,终于明白了编译到底怎么回事。
看完这篇文章之后,终于明白了编译到底怎么回事. 1 对于同一个语句,有如下三种:高级语言.低级语言.机器语言的表示 C语言 a=b+1; 汇编语言 mov -0xc(%ebp),%eax add ...
- 看完这篇文章之后,终于明白了编译到底怎么回事
看完这篇文章之后,终于明白了编译到底怎么回事. 1 对于同一个语句,有如下三种:高级语言.低级语言.机器语言的表示 C语言 a=b+1; 汇编语言 mov -0xc(%ebp),%eax add ...
- java spring框架 注解_详解Java的Spring框架中的注解的用法
1. 使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的类的实现: class UserManagerImpl implements UserManager { private ...
- 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章
前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于, ...
- 规模化敏捷框架何从入手?这篇文章把SAFe讲透了!
摘要:敏捷软件开发理念已渐渐被业界普遍接受,越来越多的公司和团队不得不面对一个新的问题,就是规模化敏捷的引入和实现.目前市场上规模化框架主要有SAFe,Less,Scrum of Scrums, Sp ...
- Spring框架bean的注解管理方法之一 使用注解生成对象
首先在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.baidu.com/s/1qXLH ...
- Spring框架中@Primary注解的作用
@Primary注解 @Primary的作用就是当一个接口存在多个实现类时,我们就可以通过@Primary注解来指明哪个实现类作为首选进行自动装配注入. 如果不加@Primary注解,接口ICarSe ...
- SAP BOPF和Spring框架里加了注解的控制器是如何被调用的
BOPF的这些determination,其方法不需要application developer自己去调用,而是被BOPF框架通过调用interface method的方式被调用. Spring MV ...
- SaaS到底是什么,如何做?这份笔记讲明白了
近年来,市场上出现了一批优秀的SaaS公司,发起了对传统软件模式的挑战.到底什么是SaaS,SaaS有什么优势?一直以来都是我十分关注的问题. 一切IT皆服务,作为一个"数据工作者" ...
最新文章
- SpringRestTemplate用法详解
- .NET新手系列(六)
- TinyXML2 的使用
- Flash存储控制器组成!(flash)
- maven-约定优于配置
- [Windows Server] 在 Windows Server 2012 上安裝 .NET Framework 3.5 - 摘自网络
- html5中的一些标签学习总结
- excel表格vlookup函数怎么用_只会Vlookup函数Out了!Excel所有查找公式全在这儿(共16大类)...
- 《Conditional BERT Contextual Augmentation》论文笔记
- Python基础-Python实现阶乘计算器
- Typora设置标题自动标号
- cent os7目录详解
- Indesign多媒体富交互插件【MagBuilder】与iOS app 【MagViewer】介绍
- 维修汽车服务器,汽修门店没有这些工具,千万别帮车主维修汽车电脑!
- 看电子合同从“0”到“1”蜕变之路
- 超级实习生内推的实习offer,实习经历企业认可吗?
- 爬虫-基于requests模块xpath解析爬取豆瓣即将上映电影目录
- jQuery源码逐行分析学习01(jQuery的框架结构简化)
- 1999年法国版的《基督山伯爵》国语
- linux mqtt物联网系统
热门文章
- spring5 配置log系统MAVEN
- if语句 power query_PowerQuery学习:认识M函数
- flink source 同步_如何生成 Flink 作业的交互式火焰图?
- 安装Linux双系统取消快速启动,为什么在双启动时禁用Windows 8上的快速启动?
- python信号处理教程_python 之信号Signal|python3教程|python入门|python教程
- mysql多表分析_mysql多表查询实例结果及分析-2017.12.14
- python opencv实时显示测量数据_python OpenCV 宽度测量
- 发生了变化 触发器函数不能读它_2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...
- mysql可以关联视图_Mysql 五: 数据库自关联、视图
- python中字典的常用函数_python中得字典和常用函数总结