类加载器&注解&动态代理
来源:互联网 发布:oecd2013年税收数据 编辑:程序博客网 时间:2024/05/29 04:49
一、类加载器
1.什么是类加载器,作用是什么?
类加载器就加载字节码文件(.class)
2.类加载器种类
(1)BootStrap:引导类加载器:加载都是最基础的文件
(2)ExtClassLoader:扩展类加载器:加载都是基础的文件
(3)AppClassLoader:应用类加载器:三方jar包和自己编写java文件
怎么获得类加载器?
ClassLoader字节码对象.getClassLoader();
二、注解@xxx
1什么是注解,注解作用?
注解就是符合一定格式的语法
注释:在阅读程序时清楚给程序员看的
注解:给jvm看的,给机器看的
@Override:帮助开发人检查是否覆盖父类的方法正确
2.注解的类型
基本类型,string,枚举类型,注解类型,Class类型,以上类型的一维数组
3.解析使用了注解的类
元注解:代表修饰注解的注解,作用:限制定义的注解的特性
@Retention
SOURCE:注解在源码级别可见
CLASS:注解在字节码文件级别可见
RUNTIME:注解在整个运行阶段都可见
@Target
代表注解修饰的范围,类上使用,方法上使用,字段上使用
FIELD;字段上可用此注解
METHOD:方法上可以用此注解
1.什么是类加载器,作用是什么?
类加载器就加载字节码文件(.class)
2.类加载器种类
(1)BootStrap:引导类加载器:加载都是最基础的文件
(2)ExtClassLoader:扩展类加载器:加载都是基础的文件
(3)AppClassLoader:应用类加载器:三方jar包和自己编写java文件
怎么获得类加载器?
ClassLoader字节码对象.getClassLoader();
二、注解@xxx
1什么是注解,注解作用?
注解就是符合一定格式的语法
注释:在阅读程序时清楚给程序员看的
注解:给jvm看的,给机器看的
@Override:帮助开发人检查是否覆盖父类的方法正确
2.注解的类型
基本类型,string,枚举类型,注解类型,Class类型,以上类型的一维数组
3.解析使用了注解的类
元注解:代表修饰注解的注解,作用:限制定义的注解的特性
@Retention
SOURCE:注解在源码级别可见
CLASS:注解在字节码文件级别可见
RUNTIME:注解在整个运行阶段都可见
@Target
代表注解修饰的范围,类上使用,方法上使用,字段上使用
FIELD;字段上可用此注解
METHOD:方法上可以用此注解
TYPE:类、接口上可以使用此注解
@Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface MyAnno {String name();//注解的属性int age()default 20;//String value();}public class MyAnnoTest {@MyAnno(name = "zhangsan")//@MyAnno("xxx")public void show(String str){System.out.println("show running.....");}}class MyAnnoParser{public static void main(String[] args) throws NoSuchMethodException, SecurityException{//解析show方法上面的@MyAnno//直接目的是获得show方法上的参数//获得show方法的字节码对象Class clazz=MyAnnoTest.class;Method method=clazz.getMethod("show",String.class);MyAnno annotation=method.getAnnotation(MyAnno.class);//获得注解上的属性值System.out.println(annotation.name());System.out.println(annotation.age());//根据业务需求写逻辑代码}}自实现测试@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface MyTest {}public class MyTestRarster {public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException{Class clazz=TestDemo.class;//获得所有的方法Method[] methods=clazz.getMethods();if(methods!=null){for(Method method:methods){//获得注解使用@MyTest的方法boolean annotationParesent=method.isAnnotationPresent(MyTest.class);if(annotationParesent){//该方法使用了mytest注解method.invoke(clazz.newInstance(),null);}}}}}public class TestDemo {@Testpublic void test1(){System.out.println("test running...");}@MyTestpublic void test2(){System.out.println("test2 running...");}}注意:JDK的Proxy方式实现的动态代理 目标对象必须有接口 没有接口不能实现jdk版动态代理
public interface TargetInterface {public void method1();public String method2();public int method3(int x); }public class Target implements TargetInterface{public void method1(){System.out.println("method1 running");}@Overridepublic String method2() {System.out.println("method2 running....");return "method2";}@Overridepublic int method3(int x) {return x;}}public class ProxyTest2 {public static void main(String[] args) {Target target=new Target();//动态创建代理对象TargetInterface proxy=(TargetInterface)Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//反射知识Object invoke=method.invoke(target, args);//目标对象的响应的方法return invoke;}});proxy.method1();//调用invoke}}
阅读全文
0 0
- 注解、泛型、类加载器、动态代理
- 类加载器&注解&动态代理
- 类加载器,注解,动态代理
- 类加载器&注解&动态代理
- 【JavaWeb-14】代理Proxy、动态代理、AOP编程思想、注解、元注解、类加载器
- 类加载器、动态代理
- 黑马程序员——高新技术——类加载器,内省,注解,动态代理
- Java基础加强_Eclipse、枚举、反射、注解、泛型、类加载器、动态代理
- 基础加强:类加载器 ---注解 ---动态代理(装饰设计模式)
- 类加载、内省、注解、代理
- jaxb动态修改注解-类加载器
- 类加载器和动态代理
- 动态代理与类加载器
- 类加载器与动态代理
- 黑马程序员 类加载器,动态代理
- 类加载器与动态代理
- java类加载器和动态代理
- 反射,类加载器,动态代理
- 2017年10月29日训练日记
- 扫雷 三子棋的实现
- 人脸识别face recognition
- 我的学习记录19
- HDOJ2064_汉诺塔III
- 类加载器&注解&动态代理
- 初学python:简易计算器
- 设计模式原则
- C++ windows消息机制和入口函数
- 【BigHereo 45】---DataStructure---树的基础(三)
- JavaWeb学习笔记-java基础-1-测试框架junit
- anaconda 虚拟环境设置
- Rust : 红楼梦一书中文字符的统计
- Robot Framework自动化测试-滚动页面