原创

Java注解解析实例

注解-一个让人头疼且又郁闷的东西,现在为大家讲解的是深入注解

如果你对注解一无所知,或者不够了解,建议先去学习注解的基础。


下面为大家提供一个注解biz的实现过程(仿常用逻辑加工)


首先我们需要为使用者提供两个注解类

Biz类以及Method类。Biz类注解用于指示我这个逻辑对象实现哪一个类的逻辑代码。Method类用于指示我的逻辑类的方法名,便于我去执行这一个逻辑类中的方法


package org.pro.auto.annotation;

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.TYPE)

public @interface Biz{

public Class<?> t();

}



package org.pro.auto.annotation;

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 Method {

public String method();

}


接着就是最为重要的一步,去读取某一个类的注解。首先我们来为一个Biz类去说明这个类需要实现的类对象

TTTe对象是逻辑实现层对象,它用于编写方法

package org.pro.auto.code;

import org.pro.auto.annotation.Method;

public class TTTe {

@Method(method="test")

public String test(){

System.out.println("测试");

return "成功";

}

@Method(method="tees")

public void tees(String str,boolean tess){

System.out.println("你好"+str+tess);

}

}

TestAnn对象代表接口对象,指示我这个对象需要实现的方法及业务处理

package org.pro.auto.code;

import org.pro.auto.ann.AnnExample;

import org.pro.auto.annotation.Biz;

@Biz(t = TTTe.class)

public class TestAnn {

public String test(){

String value = null;

try {

value = (String) AnnExample.example(TestAnn.class, "test");

} catch (Exception e) {

e.printStackTrace();

}

return "true"+value;

}

}

上放TestAnn对象所示,我这个TestAnn对象实现类所需要实现TTTe对象序列

从TTTe对象中可以看到对应的test方法

整个注解类通过AnnExample对象的example方法去实现序列,读取注解以及执行方法

package org.pro.auto.ann;

import org.pro.auto.annotation.Biz;

import org.pro.auto.annotation.Method;

public class AnnExample {

/**

* 实例化执行注解对象

* @param t 被注解的类

* @param methodName 方法名

* @param pro 参数

* @throws Exception 异常对象

*/

public static Object example(Class<?> t,String methodName,Object... pro) throws Exception {

Object object = null;

if (t.isAnnotationPresent(Biz.class)) {

Biz table = t.getAnnotation(Biz.class);

t = table.t();

java.lang.reflect.Method[] methods= t.getMethods();

for (java.lang.reflect.Method method1 : methods) {

if (method1.isAnnotationPresent(Method.class)) {

Method m = method1.getAnnotation(Method.class);

if(null != methodName && m.method().equals(methodName)){

object = method1.invoke(t.newInstance(), pro);

}

}

}

}

return object;

}

}


下面是执行逻辑方法的示例main方法

package org.pro.auto;

import org.pro.auto.ann.AnnExample;

import org.pro.auto.annotation.Biz;

import org.pro.auto.code.TestAnn;

@Biz(t = TestAnn.class)

public class Test {

public static void main(String[] args) {

try {

System.out.println(AnnExample.example(Test.class, "test"));

} catch (Exception e) {

e.printStackTrace();

}

}

}



通过Biz对象实例话TestAnn对象,通过该对象去执行AnnExample.example()方法

该方法的第一个参数Class<?> t 作用于搜索该对象中Biz对象的实例,去获取该实例的Method注解

~阅读全文-人机检测~

微信公众号“Java精选”(w_z90110),专注Java技术干货分享!让你从此路人变大神!回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。微信搜索小程序“Java精选面试题”,内涵3000+道Java面试题!

涵盖:互联网那些事、算法与数据结构、SpringMVC、Spring boot、Spring Cloud、ElasticSearch、Linux、Mysql、Oracle等

评论

分享:

支付宝

微信