java注解

本文介绍了一种使用Java自定义注解的方法,通过创建@ReqType、@ReqUrl及@ReqParam等注解,实现了对HTTP请求类型的指定、请求URL的设定以及请求参数的标记。同时提供了一个简单的示例,展示了如何在接口中应用这些注解,并在运行时通过反射读取这些注解的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下图转自:http://www.cnblogs.com/peida/archive/2013/04/26/3038503.html

下面实现一个自定义注解:

转自:http://www.cnblogs.com/whoislcj/p/5671622.html

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ReqType {

    enum ReqTypeEnum {
        GET, POST,DELETE,PUT
    }

    ReqTypeEnum reqType() default ReqTypeEnum.GET;

}
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReqUrl {
    String value() default "";
}
@Documented
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReqParam {
    String value() default "";
}
public interface IReqService {

    @ReqType(reqType = ReqType.ReqTypeEnum.POST)
    @ReqUrl("www.baidu.com")
    String login(@ReqParam("userId") String userId, @ReqParam("pwd") String pwd);
}

 

public class Test {
    public static void main(String[] args) {
        IReqService service = create(ReqServiceImpl.class);
        String result = service.login("bai", "123456");
        System.out.println(result);
    }

    private static <T> T create(final Class<T> service) {
        return (T) Proxy.newProxyInstance(
                service.getClassLoader(),
                new Class<?>[]{service},
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        ReqType reqType = method.getAnnotation(ReqType.class);
                        ReqUrl reqUrl = method.getAnnotation(ReqUrl.class);
                        System.out.println("reqType:" + reqType.reqType());
                        System.out.println("reqUrl:" + reqUrl.value());

                        Type[] parameterTypes = method.getGenericParameterTypes();
                        Annotation[][] parameterAnnotations = method.getParameterAnnotations();
                        for (int i = 0; i < parameterAnnotations.length; i++) {
                            Annotation[] parameterAnnotation = parameterAnnotations[i];
                            if (parameterAnnotation != null) {
                                ReqParam reqParam = (ReqParam)parameterAnnotation[0];
                                System.out.println("reqParam->" + reqParam.value() + "==" + args[i]);
                            }
                        }

                        //下面就可以执行相应的网络请求获取结果 返回结果
                        String result = "success";//这里模拟一个结果

                        return result;

                    }
                }

        );
    }
}

 

转载于:https://www.cnblogs.com/paulbai/p/6443941.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值