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方法执行的结果;
Junit-@Annotation-动态代理-类加载器的更多相关文章
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(4):JDK动态代理+拦截器
一.拦截器的理解 学习拦截器之前需要对动态代理和反射有一定的基础. 官方说法: java里的拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个actio ...
- 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 ...
- JDK动态代理实现原理
之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的.直到看了他的文章才彻底明白,附网址:htt ...
- JDK动态代理实现原理--转载
之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了. ...
- java的动态代理原理
之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了. ...
- jdk的动态代理源代码解析
先看一下JDK的动态是怎么用的. package dynamic.proxy; import java.lang.reflect.InvocationHandler; import java.lang ...
- 【JRebel 作者出品--译文】Java class 热更新:关于对象,类,类加载器
一篇大神的译文,勉强(嗯..相当勉强)地放在类加载器系列吧,第8弹: 实战分析Tomcat的类加载器结构(使用Eclipse MAT验证) 还是Tomcat,关于类加载器的趣味实验 了不得,我可能发现 ...
- Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题
Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...
- 【JAVAWEB学习笔记】25_基础加强:类加载器、注解 @xxx和动态代理
基础加强 学习目标 案例-自定义单元测试@MyTest 案例-全局的编码的解决 一.类加载器 1.什么是类加载器,作用是什么? 类加载器就加载字节码文件(.class) 2.类加载器的种类 类加载器有 ...
随机推荐
- LTE协议
开启通信不归路的第一炮!----LTE整体框架和协议架构概述 (2015-03-09 09:07:04) 转载▼ 分类: 通信那些事儿 听说“态度.决心.毅力和细心”一定可以成就一个人!而我们也总 ...
- VS2005打开VS2008项目的2种方法
vs2008支持.net3.5,而vs2005支持.net2.0,所以使用vs2005打开vs2008的项目,要确定你的项目是.net2.0的. 下面介绍2种方法: 方法1:用记事本打开.sln文件, ...
- chromium浏览器开发系列第五篇:Debugging with WinDBG
Windbg 相信windows开发的人都知道,有些人用的溜儿溜儿的,有个crash,直接拿这个工具一分析,就定位出来了.非常好用.以前有个同事,做sdk开发 的,会各种命令.来北京后,还去过微软面试 ...
- [poj2955/nyoj15]括号匹配(区间dp)
解题关键:了解转移方程即可. 转移方程:$dp[l][r] = dp[l + 1][r - 1] + 2$ 若该区间左右端点成功匹配.然后对区间内的子区间取max即可. nyoj15:求需要添加的最少 ...
- opencvsharp BitmapSource图片截取问题
private BitmapSource GetUiImage(FrameworkElement ui) { RenderTargetBitmap bmp=new RenderTargetBitmap ...
- 7.12实习培训日志 Linux Docker
Linux 管理 RHEL7 的用户和组 用户的属性修改 chage -l [username] #查看用户信息 usermod --expiredate=YYYY-MM-DD [username] ...
- 使用MeshLab的技巧总结(自己原创总结)
1.放大点的显示,Alt+wheel,即按住Alt键后使用鼠标滑轮改变点的显示大小.
- 天梯赛L3-001. 凑零钱(01背包记录物品)
L3-001. 凑零钱 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现 ...
- 在ubuntu下如何验证文件的MD5码 (转载)
转自:http://blog.csdn.net/david_xtd/article/details/7641682 在windows下可以使用专用的工具软件如WinMD5等来查看文件的MD5码, 在u ...
- Working Experience - MoveWindow API 失败/无效
写在前面 当然过程不可能这么顺风顺水,毕竟对 Win32 API 不熟悉,并且国内搜索引擎和博客质量较低(不误导你就算好了),最后还是通过 Google -> StackOverflow 找到答 ...