Java注解开发与应用案例
Java注解开发与应用案例
Annotation(注解)是JDK5.0及以后版本引入的,可以对包、类、属性、方法的描述,给被述对象打上标签,被打上标签后的类、属性、方法将被赋予特殊的“功能”;打个比喻,一个人如果学会飞,那这个人就是超人,所以如果给“人”这个对象打上了“会飞”的标签,那么这个人便成为“超人”。注解一般被框架解析和执行,新建立注解后,必须要有对应的框架解析和执行才有意义。下面举一个自定义注解例子:
自定义注解
它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为@interface,下面,我们用代码来演示。

package com.annotation.test; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitColor { enum Color{RED,YELLOW,WHITE} Color fruitColor() default Color.RED; }


package com.annotation.test; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitName { String value() default ""; }


package com.annotation.test; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitProvider { int id() default 0; String user() default ""; String address() default ""; }

以上是定義的蘋果的相關信息,下面,我們開始使用上面定義的註解來進行具體的實現:

package com.annotation.test;
import com.annotation.test.FruitColor.Color;
public class Apple {
@FruitName(value="FuShi Apple")
private String fruitName;
@FruitColor(fruitColor=Color.RED)
private String fruitColor;
@FruitProvider(id=1,user="Tom",address="China")
private FruitProvider provider;
}

上面的Apple類是使用我們自己定義的註解來對類成員進行修飾。接下來,我們獲取我們的註釋信息:

1 package com.annotation.test;
2
3 import java.lang.reflect.Field;
4
5 public class Test {
6
7
8 public static void getFruitInfo(String clas){
9 try {
10 Class<?> cls = Class.forName(clas);
11 Field[] fields = cls.getDeclaredFields();
12
13 for (Field field : fields) {
14 if(field.isAnnotationPresent(FruitName.class)==true){
15 FruitName name = field.getAnnotation(FruitName.class);
16 System.out.println("Fruit Name:"+name.value());
17 }
18 if(field.isAnnotationPresent(FruitColor.class)){
19 FruitColor color = field.getAnnotation(FruitColor.class);
20 System.out.println("Fruit Color:"+color.fruitColor());
21 }
22 if(field.isAnnotationPresent(FruitProvider.class)){
23 FruitProvider Provider = field.getAnnotation(FruitProvider.class);
24 System.out.println("Fruit FruitProvider: ProviderID:"+Provider.id()+" Provider:"+Provider.user() +" ProviderAddress:"+Provider.address());
25 }
26 }
27
28
29 } catch (ClassNotFoundException e) {
30 e.printStackTrace();
31 }
32 }
33
34 public static void main(String[] args) {
35 getFruitInfo("com.annotation.test.Apple");
36 }
37
38 }

輸出結果爲:
Fruit Name:FuShi Apple
Fruit Color:RED
Fruit FruitProvider: ProviderID:1 Provider:Tom ProviderAddress:China
Java注解开发与应用案例的更多相关文章
- 使用Java注解开发自动生成SQL
使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...
- java 注解开发
目录 注解 JDK自带的注解三个 注解分类 按照运行机制 按照来源分类 自定义注解的语法要求 元注解 解析注解 获取注解的注解 Spring中的注解 组合注解 注解 JDK自带的注解三个 @Overr ...
- 《Java EE 开发技术与案例教程》 这是一本好书啊:简洁精辟(相见恨晚)
第一章:Java EE 概述 1.get:JPA:Java Persistence API, 数据持久化API: JPA是一种ORM规范,它的实现实例:Hibernate.mybatis 2.Web ...
- 干掉前端!3分钟纯 Java 注解搭个管理系统
大家好,我是小富~ 最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护 ...
- Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化
知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...
- 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中 ...
随机推荐
- asp.net core AuthenticationMiddleware 在WebApi中的的使用
在.net framework 4.5架构下使用认证(Authentication)授权(Authorization). IIS使用HttpModule进行认证(Authentication),我们可 ...
- 前端笔记之JavaScript(四)关于函数、作用域、闭包那点事
一.自定义函数function 函数就是功能.方法的封装.函数能够帮我们封装一段程序代码,这一段代码会具备某一项功能,函数在执行时,封装的这一段代码都会执行一次,实现某种功能.而且,函数可以多次调用. ...
- Chapter 4 Invitations——27
"Myself, obviously." He enunciated every syllable, as if he were talking to someone mental ...
- Jenkins时间修改为北京时间
jenkins安装后时间一直是utc时间,不太方便. 系统管理->脚本命令行 运行: System.setProperty('org.apache.commons.jelly.tags.fmt. ...
- java开发知识IO知识之输入输出流以及文件
目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...
- 我是这样理解HTTP和HTTPS区别的
为何要用https? http协议的缺点 通信使用明文,内容可能被窃听(重要密码泄露) 不验证通信方身份,有可能遭遇伪装(跨站点请求伪造) 无法证明报文的完整性,有可能已遭篡改(运营商劫持) 用htt ...
- 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络AlexNet
上周我们用PaddlePaddle和Tensorflow实现了图像分类,分别用自己手写的一个简单的CNN网络simple_cnn和LeNet-5的CNN网络识别cifar-10数据集.在上周的实验表现 ...
- javascript小实例,拖拽应用(一)
前面我们将了一下拖拽的基本思想,理论是有了,那实践呢,可以运用到什么地方呢?下面就给大家带来一个用拖拽思想写的一个小实例,供大家参考,大致效果看下图: 就是这样一个简单的一个拖拽条,你可以把它理解为滚 ...
- MTF测试图卡规格
1.Imatest Chart Finder计算图卡大小 测试camera MTF时,需要知道所需要的图卡的大小,Imatest提供了一个网页,只要输入sensor的像素, 镜头的视场角,还有镜头到图 ...
- C# 处理PPT水印(一)——添加水印效果(文字水印、图片水印)
对文档添加水印可以有效声明和保护文档,是保护重要文件的方式之一.在PPT文档中同样也可以设置水印,包括文本水印和图片水印,本文将讲述如何通过Spire.Presentation for .NET来对P ...