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中 ...
随机推荐
- 解决vs-code高cpu占用率问题
(microsoft.vscode.cpp.extension.darwin进程高cpu占用问题) 免费的vs-code现在已经成为mac/linux平台的码农新宠,毕竟从windows平台开发vir ...
- 初识Shiro
Shiro是Apache基金会下的一个开源安全框架,提供了身份验证.授权.密码学和会话管理等功能,Shiro框架不仅直观易用,而且也能提供健壮的安全性,另外一点值得说的是Shiro的前身是一个始于20 ...
- docker-swarm相关命令和注意事项
在k8s出现之后,docker-swarm使用的人越来越少,但在本地集成开发环境的搭建上,使用它还是比较轻量级的,它比docker-compose最大的好处就是容器之间的共享和服务的治理,你不需要li ...
- [Leetcode]112. Path Sum -David_Lin
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- 创建简单WEB高可用集群
1. 环境介绍 我这里弄了2个虚拟机,信息如下: node1:192.168.168.201 node2:192.168.168.202 2.配置主机名 [root@node1 ~]# vim /et ...
- Thread之九:stop
搞过Java线程的人都知道,stop这个方法是臭名昭著了,早就被弃用了,但是现在任然有很多钟情与他的人,永远都放不下他,因为从他的字面意思上我们可以知道他貌似可以停止一个线程,这个需求是每个搞线程开发 ...
- [二十]JavaIO之StringReader 与 StringWriter
功能简介 还记得前面说过的CharArrayReader 和 CharArrayWriter吗? CharArray 是数据源 CharArrayReader 是读, 从一个CharArray 中读 ...
- [十六]基础类型BigInteger简介
BigInteger和BigDecimal都是Java针对大数提供的类 超出了java的表示范围 属性简介 借助于signum和mag 来实现数据的符号位和实际数据的保存 final in ...
- oracle数据库密码过期修改注意事项
近期的工作中,因数据库密码临近过期,需要进行修改,因对oracle数据库底层结构不了解,导致安装网上的教程操作是出现一些问题,特记录下来 传统的修改语句为 输入:win+R进入cmd 输入sqlpl ...
- Java基础:HashMap中putAll方法的疑惑
最近回顾了下HashMap的源码(JDK1.7),当读到putAll方法时,发现了之前写的TODO标记,当时由于时间匆忙没来得及深究,现在回顾到了就再仔细思考了下 @Override public v ...