Java 中如何自定义注解?

Java 中如何自定义注解?

注解的概念可以参考文章 Java 中的注解有哪些?如何自定义注解?

下面举个例子,看下如何自定义注解。

例子很简单,使用@interface,定义记日志的注解,通过反射读取这个注解,如果函数有标记这个注解,那么调用这个函数的时候,需要打印日志。

这里需要注意的是,调用函数就不能直接掉,而是必须通过一个代理类去调用,在代理类中去判断函数是否有相关的标注。

注解的定义

package top.javathings.demo;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface WiriteLog {
 
	String name() default "";
}
注解

注解的使用

package top.javathings.demo;
import java.lang.reflect.Method;
 
public class App {
	public static void main(String[] args) throws Exception {
 
		LogicInvoker.Invoke("work1", Logic.class);
		LogicInvoker.Invoke("work2", Logic.class);
	}
}
 
/*
 * 代理类
 * */
class LogicInvoker {
 
	public static void Invoke(String funcName, Class<?> T) throws Exception {
 
		Method m1 = T.getDeclaredMethod(funcName);
		WiriteLog annotion = m1.getAnnotation(WiriteLog.class);
		Object obj = T.newInstance();
		if (annotion != null) {
			System.out.println(annotion.name() + " begin");
			m1.invoke(obj);
			System.out.println(annotion.name() + " end");
		} else {
			m1.invoke(obj);
		}
	}
}
 
 
class Logic {
	@WiriteLog(name = "work1")
	public void work1() {
		System.out.println("work1 working");
	}
 
	@SuppressWarnings(value = { })
	public void work2() {
		System.out.println("work2 working");
	}
 
}

运行结果:

work1 begin work1 working work1 end work2 working

可以看到,标注了注解的方法,运行的时候,会在运行开始前打印一个日志,运行结束后再打印一个日志。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏社区的朋友们

Unity GC 优化 贴士大全

Unity中频繁的垃圾回收往往是造成手游性能瓶颈的一大元凶,本文对常见的造成频繁垃圾回收的原因做一个扫描,让开发者在日常开发中可以有意识的避开这些问题。

60800
来自专栏Android相关

X86 Assemble指令--ptr

在Assemble中通常会看到WORD ptr或者DWORD ptr或者BYTE ptr等关键字,这些关键字主要用来标识指令操作数的大小(或者说长度) WOR...

10420
来自专栏熊二哥

Java核心编程快速入门

Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示。 ? ? 反射reflect是理解Java语言...

23290
来自专栏专注 Java 基础分享

使用Java注解来简化你的代码

     注解(Annotation)就是一种标签,可以插入到源代码中,我们的编译器可以对他们进行逻辑判断,或者我们可以自己写一个工具方法来读取我们源代码中的注...

36150
来自专栏Java技术分享

怎样理解 java 注解和运用注解编程?

完整源码下载地址 GitHub - MatrixSeven/JavaAOP: 一个基于原生JDK动态代理实现的AOP小例子 使用反射结合JDK动态代理实现了类似...

41890
来自专栏用户2442861的专栏

JAVA注解

      http://blog.csdn.net/rj042/article/details/6399965

26020
来自专栏大数据架构

Java进阶(一)Annotation(注解)

Annotation是Java5开始引入的特性。它提供了一种安全的类似于注释和Java doc的机制。实事上,Annotation已经被广泛用于各种Java框架...

46270
来自专栏java 成神之路

NIO 之 Buffer 图解

43680
来自专栏androidBlog

注解使用入门(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

9510
来自专栏JavaEdge

解惑Java注解类型(待更新)理解Java注解基本语法注解与反射机制运行时注解处理器Java 8中注解增强

java注解是在JDK5时引入的新特性,鉴于目前大部分框架(如Spring)都使用了注解简化代码并提高编码的效率,因此掌握并深入理解注解对于一个Java工程师是...

70010

扫码关注云+社区

领取腾讯云代金券