码迷,mamicode.com
首页 > 编程语言 > 详细

Java注解和代理实现

时间:2016-07-02 16:02:48      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

1、定义注解

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodAnnotation {
    String name() default "Default Annotation Name";
    String url() default "default.com";
}

2、使用注解的信息类

public interface IProxyTest {

    @MethodAnnotation()
    public void testMethodAnnotation();
    
    @MethodAnnotation(name="亚马逊",url="z.cn")
    public void testMethodAnnotationWithValue();
}

3、实现该接口

public class ProxyTestImpl implements IProxyTest {

    public void testMethodAnnotation() {
        System.out.println("UseAnnotion->testMethodAnnotation");
    }
    
    public void testMethodAnnotationWithValue() {
        System.out.println("UseAnnotion->testMethodAnnotationWithValue");
    }

}

4、动态代理类实现及main测试

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class LogProxy implements InvocationHandler {

    private static int count = 0;
    private Object target;

    private LogProxy() {
    }

    private static Object getInstance(Object o) {
        LogProxy lp = new LogProxy();
        lp.target = o;
        Object result = Proxy.newProxyInstance(o.getClass().getClassLoader(), o  
                .getClass().getInterfaces(), lp);//代理对象
        return result;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        if (method.isAnnotationPresent(MethodAnnotation.class)) {
            MethodAnnotation annotation = method
                    .getAnnotation(MethodAnnotation.class);
            count++;//使用场景:统计接口的使用次数,可以在性能范围内降级
            System.out.println("执行方法" + method.getName() + ":" + count);
        }
        Object obj = method.invoke(target, args);
        return obj;
    }

    public static void main(String[] args) {
        IProxyTest ua = new ProxyTestImpl();
        IProxyTest lp = (IProxyTest) LogProxy.getInstance(ua);
        lp.testMethodAnnotation();
        lp.testMethodAnnotationWithValue();
    }
}

Java注解和代理实现

标签:

原文地址:http://www.cnblogs.com/hellocyc/p/5635340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!