前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 中如何自定义注解?

Java 中如何自定义注解?

作者头像
水货程序员
修改2018-12-03 16:04:32
8570
修改2018-12-03 16:04:32
举报
文章被收录于专栏:javathingsjavathings

Java 中如何自定义注解?

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

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

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

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

注解的定义

代码语言:javascript
复制
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 "";
}
注解

注解的使用

代码语言:javascript
复制
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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java 中如何自定义注解?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档