美文网首页
注解和动态代理

注解和动态代理

作者: 奔跑_孤傲的路上 | 来源:发表于2017-06-12 19:10 被阅读0次

    按照来源注解

    java自带的注解

    @override
    @SuppressWarnings
    @Deprecated

    第三方的注解

    mybatis的注解
    @Test

    自定义注解

    元注解

    给注解标示注解

    @Target(value={ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    public @interface Hemi {
        String value();
        int num=100;
    }
    

    @Target指定注解可以放置的位置
    ElementType.TYPE:放在类上
    ElementType.METHOD:放在方法上
    ElementType.FIELD:放在字段上
    @Retention:指定注解在什么时候有用
    RetentionPolicy.RUNTIME:运行时有用
    RetentionPolicy.CLASS:编译时有用
    RetentionPolicy.RESOURCE:源文件有用
    @Inherited:表示可继承

    得到注解的内容

        Class<?> clazz=MyHemi.class;
        Hemi annotation = clazz.getAnnotation(Hemi.class);
        String value = annotation.value();
        Method method = clazz.getMethod("insert");
        Hemi annotation2 = method.getAnnotation(Hemi.class);
        String value2 = annotation2.value();
        System.out.println(value);
        System.out.println(value2);
    

    注解的作用

    1.传递数据
    2.标记

    jdk动态代理

    1.被代理类必须实现一个接口

    public class Student implements Runnable{
    
        @Override
        public void run() {
            System.out.println("跑步");   
            try {
                Thread.sleep(2000);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
    

    2.创建一个类实现InvocatiobHandler接口,该类用来对象代理对象进行方法的增强

    public class TimeUntil implements InvocationHandler{
        //将对象传入进来
        public Object target;
        public TimeUntil(Object target){
            this.target=target;
        }
    }
    

    3.通过Proxy.newProxyInstance(ClasLoader, Class, InvovationHandler)来创建代理类对象并调用代理对象的方法

        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            long time1 = System.currentTimeMillis();
            method.invoke(target, args);
            long time2 = System.currentTimeMillis();
            System.out.println(time2-time1);
            return null;
        }
    
    

    相关文章

      网友评论

          本文标题:注解和动态代理

          本文链接:https://www.haomeiwen.com/subject/qzxrqxtx.html