zoukankan      html  css  js  c++  java
  • Junit-@Annotation-动态代理-类加载器

    一.测试单元
         概述:用于测试JAVA代码的工具类,已内置在Eclipse中;
         格式:
             1.在方法的上面添加@Test;
             2.对被测试的方法的要求:权限-public;返回值-void;参数-空参
             3.@Before:在@Test标注的方法前执行,可以用于初始化;
               @After:在@Test标注的方法后执行,可以用于释放资源;

    二.注解
         概述:java的一种数据类型,和类/接口在同一级别
         与注释的区别:注释是给程序员看的;注解是给计算机看的
         作用:语法检查;代码分析;生成API(@param   @return)
         JDK 提供的:@Override    @SuppressWarnings    @Deprecated
         自定义注解:
             关键字:@interface
             格式:
                 public @interface 注解名{
                     public abstract 返回值类型 属性名() default 数据值
                 }
             注意事项:
                 public abstract为固定修饰符,不可更改;
                 返回值类型:基本数据类型(不含包装类),Class,String,enum,注解类型,以及这些类型的一维数组;
                 default:数据值,可以不写,如若不写,将来使用注解的时候须对属性赋值;

            使用格式:如
                 @自定义注解名(属性名1=属性值1,属性名2=属性值2)
                 public void method(){}
             自定义注解的解析:
                 Class类(java.lang)的方法:
                     public Annotation[] getAnnotations(){}:返回此字节码文件对象上存在的所有注释(相当于加在类上的注解)
                 AccessibleObject类(java.lang.reflect)的方法:
                     public Annotation[] getAnnotations(){}:返回此字节码文件对象上存在的所有注释(相当于加在类上的注解)
                     public <T extends Annotation> T getAnnotation(Class<T> annotationClass){}:根据annotationClass字节码文件对象,获取annotationClass的普通对象;
                     public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass){}:判断是否包含指定的注解;
                 注意:默认情况下,注解仅在源代码中存在,编译后消失;因此,如果想进行注解的解析,必须保证,当代码运行的时候,注解还要存在,不能消失;
         元注解:
             概述:JDK 提供的用于注解注解的注解,只能使用在注解类上.
             作用:2个.
                 1.控制自定义注解的生命周期;
                 2.控制自定义注解可以使用的位置;
             常用的元注解2个:
                 @Retention (java.lang.annotation)
                     定义:@Documented
                         @Retention(value=RUNTIME)
                         @Target(value=ANNOTATION_TYPE)
                         public @interface Retention
                     属性:属性名为value
                         public abstract RetentionPolicy value
                     RetentionPolicy中的常量:
                         RUNTIME:编译器把注解记录在类文件中,运行时JVM将保留注解,因此可以反射性读取.   
                         CLASS:编译器把注解记录在类文件中,但在运行时JVM不保留注解.
                         SOURECE:编译器丢弃注解
                 @Target (java.lang.annotation)
                     定义:@Documented
                         @Retention(value=RUNTIME)
                         @Target(value=ANNOTATION_TYPE)
                         public @interface Target
                     属性:属性名为value
                         public abstract ElementType[] value
                     ElementType中的枚举常量:
                         METHOD:方法声明
                         TYPE:类、接口(包括注释类型)或枚举声明

    三.类加载器
         加载机制:全盘负责委托机制.保证一个类在内存中只生成一个字节码文件对象
         获取方式:
             1.Class类中的方法
             public ClassLoader getClassLoader(){}:返回该类的加载器
             2.ClassLoader 类中的方法:通过类加载器,获取父加载器
             public final ClassLoader getParent(){}:
         注意事项:
             1:引导类加载器不是java代码编写的,因此获取出来的对象是Null;
             2:扩展类加载器的名称:ExtClassLoader
             3:应用类加载器的名称:AppClassLoader

    四.动态代理
         概述:在不改变源代码的情况下,对任意的一个类中的任意的方法,进行增强的技术,叫动态代理;动态代理使用的前提是:被代理的类必须有接口;
         相关名词介绍:
             目标类:被代理的类;(被增强的类)
             代理类:由动态代理的手段产生出来的类;具有增强目标类的能力;
             访问者:想访问目标类中的方法的类;
         Proxy 类(java.lang.reflect)
             定义:public class Proxy extends Object implements Serializable
             静态方法:
                 public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h) throws IllegalArgumentException
                                                                         返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
                                                             loader:类加载器对象,一般传递应用类加载器;
                                                             interfaces:目标类实现的所有接口的字节码文件对象数组;
                                                             h:调用处理程序;(就是一个处理流程)
         InvocationHandler 接口(java.lang.reflect)
             定义:public interface InvocationHandler
             抽象方法:
                 Object invoke(Object proxy,Method method,Object[] args) throws Throwable 在代理实例上处理方法调用并返回结果。
                                         Proxy:就是动态代理产生的对象;不能打印该对象;
                                         Method:是动态代理对象针对访问者要访问的方法组成的对象;
                                         Args:是method方法执行的时候,所需要的全部参数;
                                         返回值Object:是method方法执行的结果;

  • 相关阅读:
    JAVA C 数据类型对应
    JAVA javah
    JAVA java
    JAVA javac
    JAVA jar命令(一)-jar打包class文件
    Unity 中调用Android的JAVA代码
    unity 打包Apk生成签名证书keystore
    SQL Server 备份还原
    C/C++ warning C4251: class ... 需要有 dll 接口由 class“..” 的客户端使用
    如何修复 WordPress 中的 HTTP 错误
  • 原文地址:https://www.cnblogs.com/huguangqin/p/7128839.html
Copyright © 2011-2022 走看看