注解与反射 - 注解
什么是注解
注解有检查与约束的规范
Annotation是从JDK5.0开始引入的新技术。
- 不是程序本身,可以对程序作出解释(这一-点和注释(comment)没什么区别)。
- 可以被其他程序(比如:编译器等)读取。
◆Annotation的格式:
- 如:@SuppressWarnings(value=“unchecked”).
Annotation在哪里使用?
可以附加在package , class , method, field等上面,相当于给他们添加了额外的辅助信息。
我们可以通过反射机制编程实现对这些元数据的访问
注解分为元注解和内置注解
元注解
元注解的作用就是负责注解其他注解, Java定义了4个标准的meta -annotation类型,他们被用来提供对其他annotation类型作说明.
这些类型和它们所支持的类在java.lang.annotation包中可以找到 ( @Target , @Retention,@Documented , @Inherited )
(SOURCE < CLASS < RUNTIME)
- @Target :用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
- @Retention :表示需要在什么级别保存该注释信息,用于描述注解的生命周期
- @Document: 说明该注解将被包含在javadoc中
- @Inherited: 说明子类可以继承父类中的该注解
内置注解
@Override :定义在java.lang.Override中, 此注释只适用于修辞方法,表示-个方法声明打算
重写超类中的另一个方法声明.@Deprecated :定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不
鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择.@SuppressWarnings :定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息.
与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的,
我们选择性的使用就好了.- @SuppressWarnings(“ll”)
- @SuppressWarnings(“unchecked”)
- @SuppressWarnings(value={“unchecked” “deprecation”})
自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口
- @ interface用来声明一个注解,格式: public @ interface注解名{定义内容}
- 其中的每-一个方法实际 上是声明了一个配置参数.
- 方法的名称就是参数的名称.
- 返回值类型就是参数的类型(返回值只能是基本类型 ,Class , String , enum ).
- 可以通过default来声明参数的默认值
- 如果只有一个参数成员,一般参数名为value
- 注解元素必须要有值,我们定义注解元素时, 经常使用空字符串,0作为默认值
简单的自定义注解
//定义一个注解
//Target 用来标识该注解用来放在什么位置 分别为 类上 方法上 。。。
@Target({ElementType.TYPE,ElementType.METHOD})
//Retention 标识我们的注解在什么时候有效
@Retention(RetentionPolicy.RUNTIME)
//表示我们的注解生成在javaDoc中
@Documented
//表示子类可以继承父类的注解
@Inherited
@interface myAnnotation{}
比较复杂的自定义注解
@myAnnotation()
public class Demo01 {}
//定义一个注解
//Target 用来标识该注解用来放在什么位置 分别为 类上 方法上 。。。
@Target({ElementType.TYPE,ElementType.METHOD})
//Retention 标识我们的注解在什么时候有效
@Retention(RetentionPolicy.RUNTIME)
@interface myAnnotation{String name() default "";int age() default 1;//代表不存在 和indexOf 差不多 找不到就返回-1int id() default -1;String[] gri() default {"a","b"};
}
如果注解的变量不带默认值的话在使用的时候要显示的调用
@myAnnotation(name = "Mayb")
public class Demo01 {}//定义一个注解
//Target 用来标识该注解用来放在什么位置 分别为 类上 方法上 。。。
@Target({ElementType.TYPE,ElementType.METHOD})
//Retention 标识我们的注解在什么时候有效
@Retention(RetentionPolicy.RUNTIME)
@interface myAnnotation{String name() ;int age() default 1;//代表不存在 和indexOf 差不多 找不到就返回-1int id() default -1;String[] gri() default {"a","b"};
}
如果只有一个变量的话可以使用value 可以在使用时直接写参数
@myAnnotation1("Mayb")
public class Demo01 {}
@interface myAnnotation1{String value();
}
其他注解
这里 的注解可能在未来使用中会陆续编辑修改
1、@Controller
@Controller用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了**@RequestMapping注解。
@Controller只是定义了一个控制器类,而使用@RequestMapping**注解的方法才是处理请求的处理器。
2、@Configuration
@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被 @Bean 注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
注意:@Configuration注解的配置类有如下要求:
1、@Configuration不可以是final类型;
2、@Configuration不可以是匿名类;
3、嵌套的@Configuration必须是静态类。
3、@Component
1、@Controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层
2、@Service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理
3、@Repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
4、@Component (把普通pojo实例化到spring容器中,相当于配置文件中的
)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于 @Controller 、@Services等的时候),我们就可以使用 @Component 来标注这个类。
案例:
<context:component-scan base-package=”com.*”>
上面的这个例子是引入Component组件的例子,其中base-package表示为需要扫描的所有子包。
共同点:被 @Controller 、@Service、@Repository、@Component注解的类,都会把这些类纳入进spring容器中进行管理
注解与反射 - 注解相关推荐
- 通过Java反射获取对象上的注解,java反射注解妙用-获取所有接口说明
原标题:java反射注解妙用-获取所有接口说明 转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10293490.html 前言 最近在做项目权限,使用shir ...
- java 获取接口的注解_java反射注解妙用-获取所有接口说明
前言 最近在做项目权限,使用shiro实现restful接口权限管理,对整个项目都进行了重构.而权限管理需要用到所有的接口配置,包括接口url地址,接口唯一编码等.想要收集所有的接口信息,如果工程接口 ...
- ❤️Java面试高频《注解与反射》(建议收藏)❤️
注解与反射 注解 1.Annotation是从JDK5.0开始引入的新技术 2.Annotation的作用: 不是程序本身,可以对程序做出解释(这一点和注释(comment)没什么却别) 可以被其他程 ...
- 注解和反射详细笔记。自定义注解,元注解,内置注解。反射机制,Java Reflection,Java内存分析,反射操作注解,java.lang.reflect.Method,Class
文章目录 注解 什么是注解 内置注解 元注解 自定义注解 反射机制 静态语言 vs 静态语言 Java Reflection 反射相关的主要API Class类 Java内存分析 创建运行时类的对象 ...
- 04Java注解和反射
Java注解和反射 Java框架的底层即为Java的注解和反射 注解(开胃菜) 注释:给开发人员阅读,不算在程序之内 注解:可以给开发人员阅读,也可以给程序阅读,也可以被其他的程序阅读,也不算在程序之 ...
- java 注解_怎样理解 Java 注解和运用注解编程?
怎样理解 Java 注解和运用注解编程? 注解和使用 先来看下概念首先从注释来看: 注释:给代码添加说明和解释,注释帮助开发人员理解程序.(Comment)说白点就是注释是给人看的. 注解:给代码添加 ...
- 深圳java培训:怎样理解 Java 注解和运用注解编程?
深圳java培训:怎样理解 Java 注解和运用注解编程? 注解和使用 先来看下概念首先从注释来看: 注释:给代码添加说明和解释,注释帮助开发人员理解程序.(Comment)说白点就是注释是给人看的. ...
- [03] 处理注解:反射
1.AnnotatedElement接口 如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的 ...
- java 导出excel 注解_Java基于注解和反射导入导出Excel
list = ei.getDataList(User.class); for (User user : list){ try{ //to do: 保存/处理数据 //userService.save( ...
最新文章
- python基础代码库-python爬虫基础教程:requests库(二)代码实例
- 多元统计分析-概率,期望,方差,正态分布
- 第四届中国国际大数据大会务实推进应用落地
- abort has been called
- iOS开发-NULL和nullptr和nil和Nil还有NSNull
- python函数中把列表(list)当参数时的入坑与出坑
- Lab 6:uC/OS II
- java部署jar还是war优劣_详解Spring Boot 部署jar和war的区别
- OpenGL Sharders(着色器) 入门
- WAF与IPS的区别总结
- flask-前端-requests之response对应关系 json
- 加密模式 openssl sm4_OpenSSL/GmSSL 动态引擎
- nvme分区选mbr还是guid_小白也会装系统 固态硬盘Win10热门主板Bios设置教程NVME和SATA...
- Windows 11 配置JDK 环境变量
- 数据库仓库管理系统课程设计
- fat32和ntfs的区别 fat32和ntfs有什么区别
- 深度学习算法优化系列十 | 二值神经网络(Binary Neural Network,BNN)
- 【genius_platform软件平台开发】第九十三讲:串口通信(485通信)
- 香港科大2020年TOP12人气热帖@商学院公众号
- 软件开发之版本控制方式
热门文章
- 武汉新时标文化传媒有限公司短视频中需要的平台和软件都是这样的
- mysql服务器默认使用用户_在Windows下配置MySql服务器默认使用的用户是
- Nye Lubricants UNIFLOR RHEOLUBE NYOGEL
- 必备的 Linux 性能诊断分析工具!(文末送书)
- week16 CSP-M4-B ZJM要抵御宇宙射线
- 龙族幻想最新东京机器人位置_龙族幻想凌晨四点的东京机器人位置在哪?
- js日期函数--getMonth
- 最老程序员创业开发实训13---Android---网络请求与异步任务
- :before、:after伪元素的用法 !
- 使用Exchange获取邮件内容