一.测试单元
     概述:用于测试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方法执行的结果;

Junit-@Annotation-动态代理-类加载器的更多相关文章

  1. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(4):JDK动态代理+拦截器

    一.拦截器的理解 学习拦截器之前需要对动态代理和反射有一定的基础. 官方说法:         java里的拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个actio ...

  2. ASP.NET Core搭建多层网站架构【9.2-使用Castle.Core实现动态代理拦截器】

    2020/01/31, ASP.NET Core 3.1, VS2019, Autofac.Extras.DynamicProxy 4.5.0, Castle.Core.AsyncIntercepto ...

  3. JDK动态代理实现原理

    之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的.直到看了他的文章才彻底明白,附网址:htt ...

  4. JDK动态代理实现原理--转载

    之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了.  ...

  5. java的动态代理原理

    之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了.  ...

  6. jdk的动态代理源代码解析

    先看一下JDK的动态是怎么用的. package dynamic.proxy; import java.lang.reflect.InvocationHandler; import java.lang ...

  7. 【JRebel 作者出品--译文】Java class 热更新:关于对象,类,类加载器

    一篇大神的译文,勉强(嗯..相当勉强)地放在类加载器系列吧,第8弹: 实战分析Tomcat的类加载器结构(使用Eclipse MAT验证) 还是Tomcat,关于类加载器的趣味实验 了不得,我可能发现 ...

  8. Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题

    Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...

  9. 【JAVAWEB学习笔记】25_基础加强:类加载器、注解 @xxx和动态代理

    基础加强 学习目标 案例-自定义单元测试@MyTest 案例-全局的编码的解决 一.类加载器 1.什么是类加载器,作用是什么? 类加载器就加载字节码文件(.class) 2.类加载器的种类 类加载器有 ...

随机推荐

  1. 【转】Pro Android学习笔记(四):了解Android资源(下)

    处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...

  2. WPF中数据绑定问题

    在数据库中字段不区分大小写,可以页面是区分的,一开始以为不区分,可我从数据库查出了数据在前台就是不显示想了半天才发现的. <sdk:DataGrid FrozenColumnCount =&qu ...

  3. Spring3注解零配置

    我们在以前学习 Spring 的时候,其所有的配置信息都写在 applicationContext.xml 里,大致示例如下: java代码: 查看复制到剪贴板打印     OracleDriver& ...

  4. 2、R-reshape2-melt

    1.melt:         短数据转长数据 (1).融合的数据为数组.表以及矩阵,melt的表达式为: melt(data, varnames = names(dimnames(data)), . ...

  5. skb详细解析【转】

    skb详细解析[转]    摘自:http://blog.chinaunix.net/uid-30035229-id-4883992.html     在自己的模块发送函数中,需要对skb进行重新构造 ...

  6. windows64位如何安装pyspider并运行

    1.下载whl文件: http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 2.安装该文件 3.可能碰到问题,pip的版本低了,需要更新一下pip的版本.更新 ...

  7. CSP 201703-4 地铁修建 最小生成树+并查集

    地铁修建   试题编号: 201703-4 试题名称: 地铁修建 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力, ...

  8. Tyvj2017清北冬令营入学测试

    P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算一次成绩.参与享优惠 描述 这是一道有背 ...

  9. [Xcode 实际操作]六、媒体与动画-(7)遍历系统提供的所有滤镜

    目录:[Swift]Xcode实际操作 本文将演示系统到底提供了多少滤镜供开发者使用,并了解每个滤镜都有哪些参数需要配置. 在项目导航区,打开视图控制器的代码文件[ViewController.swi ...

  10. git 基本操作——上传文件与项目分支管理

    创建并转入新分支:git checkout –b XX(其中XX代表分支名称) 将新分支发布在github上: git push origin Branch1 往分支中添加文件:git add mas ...