java 注解开发
注解
JDK自带的注解三个
- @Override: 限定重写父类方法, 实现接口方法。该注解只能用于方法
- @Deprecated: 用于表示所修饰的元素(类, 方法,构造器等等)已过时。通常是因为所修饰的结构危险或存在更好的选择,过时是可以用的,意义只是作为一种提示,因为原来的项目中用的老的代码必须要能用,过时是给我们后面做开发的提示
- @SuppressWarnings: 抑制编译器警告
example
@SuppressWarnings({"unused","rawtypes"})
注解分类
按照运行机制
- 源码注解
注解只在源码中存在,编译成class文件就不存在了 - 编译时注解
注解在源码和class文件里都存在(jdk自带注解)
3.运行时注解
在运行阶段起作用。影响逻辑的注解,比如@Autowired
按照来源分类
- 来及JDK的注解,
- 来自第三方的注解
- 自己定义的注解
自定义注解的语法要求
1、使用@interface关键字定义注解
2、成员以无参无异方式声明
3、可以defaulit为成员指定一个默认值
4、成员的类型是受限制的,合法的类型包括原始类型,以及String,Class,Annotation,Enumeration
5、如果注解只有成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号
6、注解类可以没有成员,没有成员的注解称为标识注解


元注解
- Retention
决定注解的运行时机,编译时,运行时和源码注解 - Target
注解的使用对象 - Inherited
被使用了注解的父类,子类是否被继承 - 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 注解开发的更多相关文章
- Java注解开发与应用案例
Java注解开发与应用案例 Annotation(注解)是JDK5.0及以后版本引入的,可以对包.类.属性.方法的描述,给被述对象打上标签,被打上标签后的类.属性.方法将被赋予特殊的“功能”:打个比喻 ...
- 使用Java注解开发自动生成SQL
使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...
- 干掉前端!3分钟纯 Java 注解搭个管理系统
大家好,我是小富~ 最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护 ...
- Java自定义注解开发
一.背景 最近在自己搞一个项目时,遇到可需要开发自定义注解的需求,对于没有怎么关注这些java新特性的来说,比较尴尬,索性就拿出一些时间,来进行研究下自定义注解开发的步骤以及使用方式.今天在这里记下, ...
- Java实现自定义注解开发
Java实现自定义注解开发 一直都对注解开发挺好奇的,最近终于有时间自己实践了一把,记录一下 万一后期会用到呢 哈哈哈 首先我们了解一下自定义注解的标准示例,注解类使用 @interface 关键字修 ...
- 【java框架】MyBatis(7)--MyBatis注解开发
1.MyBatis注解开发 1.1.Lombok的基本使用 Lombok是SpringBoot2.1.X版本与IDEA官方支持的一个插件,它是为简化POJO类中繁杂重复代码:geter/setter/ ...
- bean的自动装配,使用注解开发,使用java的方式配置Spring
bean的自动装配 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种装配的方式 在xml中显示的配置 在java中 ...
- Java开发学习(十)----基于注解开发定义bean 已完成
一.环境准备 先来准备下环境: 创建一个Maven项目 pom.xml添加Spring的依赖 <dependencies> <dependency> < ...
- Spring使用注解开发及使用java类进行配置bean
Spring使用注解开发 说明 在spring4之后,想要使用注解形式,必须得要引入aop的包 在配置文件当中,还得要引入一个context约束 <?xml version="1.0& ...
随机推荐
- 国浩:Cassandra在360的最新进展
大家好,我是来自奇虎360的国浩.今天我给大家带来的是Cassandra在360的最新进展. 我会从四个方面来介绍Cassandra在360的应用情况:Cassandra在360的使用历史再结合两个案 ...
- “随手记”开发记录day07
今天完成了关于我们页面中的相关信息,由于之前没有做过这个东西,只想着用一个view解决 可是发现我们整的太简单了,还是太年轻,最后想出来要跟java代码一起解决这个问题, 效果
- JS DOM重点核心笔记
DOM重点核心 文档对象模型,是W3C推荐的处理可扩展的标记语言的标准编程接口 我们主要针对与勇士的操作,主要有创建.增加.删除.修改.查询.属性操作.事件操作 三种动态创建元素的 ...
- Zookeeper学习(二)
一.Znode节点属性 dataVersion 数据版本, 每次当 Znode 中的数据发生变化的时候, dataVersion都会自增一下cversion 节点版本, 每次当 Znode 的节点发生 ...
- C#LeetCode刷题-字典树
字典树篇 # 题名 刷题 通过率 难度 208 实现 Trie (前缀树) 48.6% 中等 211 添加与搜索单词 - 数据结构设计 39.9% 中等 212 单词搜索 II 27.9% ...
- Golang Gtk+3教程:GtkBuilder使用XML构建UI
在这节我将介绍GtkBuilder,其使我们可以从一个描述界面的xml文件构建UI.而这个文件我们可以使用Glade生成,这会极大的方便我们编辑用户界面.这节我们会使用到这么一个XML文件,名字为Bu ...
- ElasticSearch在CentOS的安装
ElasticSearch在CentOS的安装 一.tar包安装 单机安装 创建elastic用户,ElasticSearch不支持root用户运行 useradd elastic 上传文件到 /so ...
- Python定时任务轻量解决方案---Schedule
写后端的同学们可能都知道,工作中可能需要周期性执行一些任务,俗称定时任务.Linux环境下,可以借助于系统自带的crontab完成定时任务.但是很多时候,开发的同学们可能并没有权限去操作crontab ...
- python字典的增删改查
字典dict 知识点: {}括起来,以键值对形式存储的容器性数据类型: 键-必须是不可变数据类型,且是唯一的: -值可以是任意数据类型.对象. 优点:关联性强,查询速度快. 缺点:以空间换时间. 字典 ...
- 什么情况下适合用UDP协议,什么情况下适合用TCP协议?
总的来说 TCP协议提供可靠的服务, UDP协议提供高效率的服务. 高可靠性的TCP服务提供面向连接的服务,主要用于一次传输大量报文的情形, 如文件传输,远程登录等: 高效率的UDP协议提供无连接的数 ...