一、类加载器1.什么是类加载器,作用是什么?类加载器就加载字节码文件(.class) 2.类加载器的种类类加载器有三种,不同类加载器加载不同的 1)BootStrap:引导类加载器:加载都是最基础的文件 2)ExtClassLoader:扩展类加载器:加载都是基础的文件 3)AppClassLoader:应用类加载器:三方jar包和自己编写java文件
怎么获得类加载器?(重点) ClassLoader 字节码对象.getClassLoader(); package cn.qlq; public class Demo { public static void main(String[] args) { //获得Demo字节码文件的类加载器 Class clazz = Demo.class;//获得Demo的字节码对象 ClassLoader classLoader = clazz.getClassLoader();//获得类加载器 //getResource的参数路径相对classes(src) //获得classes(src)下的任何的资源 String path = classLoader.getResource("cn/qlq/jdbc.properties").getPath(); //classLoader.getResourceAsStream(""); System.out.println(path); } }
二、注解 @xxx注解在目前而言最主流的应用:代替配置文件 关于配置文件与注解开发的优缺点: 注解优点:开发效率高 成本低 注解缺点:耦合性大 并且不利于后期维护 1.jdk5提供的注解@Override:告知编译器此方法是覆盖父类的 @Deprecated:标注过时 @SuppressWarnings:压制警告
发现的问题: 不同的注解只能在不同的位置使用(方法上、字段上、类上)
2.自定义注解: 1.注解是给机器看的,注释是给程序员看的,这是两者的区别。现在各大框架都在使用注解,而我们程序员需要做的就是知道如何使用注解,而对其底层原理却不清楚,今天看了一段视频,现在浅谈一下注解的使用。 2.注解的使用: 大体分为三部分: 定义注解、使用注解、解析注解。在框架中定义与解析框架都已经为我们做好了。 (1)定义注解:定义一个简单的注解:
1 import java.lang.annotation.ElementType; 2 import java.lang.annotation.Retention; 3 import java.lang.annotation.RetentionPolicy; 4 import java.lang.annotation.Target; 5 6 7 @Target(ElementType.METHOD) 8 @Retention(RetentionPolicy.RUNTIME) 9 public @interface MyAnnotation { 10 //定义注解的属性,这不是方法 11 String name();//必选注解 12 int value() default 20;//有属性就是可选属性 13 } 做一个解释吧:定义前面的@Target,与@Retention又称为元注解,限制定义的注解的特性: @Target定义注解使用的位置,值有:看名字一般就很明显了吧 @Retention:限定注解的可见范围:值有 一个图解释上面的可见范围: (2)注解的使用: 1 package annotation; 2 3 public class UseMyAnnotion { 4 5 // 这里只用一个属性,另一个value属性有默认值不用设置 6 @MyAnnotation(name = "QizoZhi") 7 public void show(String str){ 8 System.out.println(str); 9 } 10 }
(3)解析注解:这里使用了底层的映射原理
1 package annotation; 2 3 import java.lang.reflect.InvocationTargetException; 4 import java.lang.reflect.Method; 5 6 public class MyAnnotationParser { 7 8 public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { 9 // 获取字节码对象 10 Class clazz = UseMyAnnotion.class; 11 Method method = clazz.getMethod("show", String.class); 12 // 获取方法上面的注解 13 MyAnnotation annotation = method.getAnnotation(MyAnnotation.class); 14 // 获取注解属性值 15 System.out.println(annotation.name()+"\t"+annotation.value()); 16 17 // 取到值就可以根据业务处理数据 18 19 //激活方法,也就是让方法执行 20 method.invoke(new UseMyAnnotion(), "HH"); 21 } 22 }
到这里注解基本上就完了,我们需要了解底层实现原理,真正开发的时候定义注解以及解析注解一般不用我们写,我们只需要学会使用框架提供的注解,但是使用注解的开发也有缺点。对后期的维护增加了困难。
Java注解之Retention、Documented、Target介绍参考:https://www.cnblogs.com/qlqwjy/p/8516551.html
【小主,觉得有用的话点击右边的打赏打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢!】
|
|