反射-注解-泛型
1.反射
java 靠反射 成为 伪动态语言== 在运行时,代码可以根据某些条件改变自身结构。
框架 = 设计模式 + 注解 + 反射
反射 应用 动态代理
反射 与正常路径(包类-new ->对象)相反 可通过对象拿到包类。 原来时 对象调用方法--->> 反射-方法对象呼喊对象

程序 运行时,反射可以出来干脏活。
反射 打破封装,自守自攻。 封装性如单例吗,是建议问题。反射是能不能问题
单例也没用了。
编译器不知道用哪个类,这是时候用反射,读取配置。
登录用登录对象,注册用注册对象。删除用删除对象
字节码文件 加载进内存--运行时类,被虚拟机控制, 成为Class实例对象。

通过 类造对象,但类本身也是Class的对象。Class 可以知道并控制一个字节码运行类的所有信息。 --反射
泛型信息擦除后,声明时的泛型信息会记录在Class的Signature签名属性中。编译器在擦除泛型时,会保留一部分泛型元数据。
运行类本身, 运行类对象,运行类路径(动态性),类加载器--都可获取目标类的Class实例。



类的加载-链接-初始化


【造对象 四种方式 :new 反序列化 反射 clone】

运行时才能确定用哪个类,最好用反射--动态性

mybaties 泛型

复习:封装性(单例模式) 抽象类(模板方法) 接口(静态代理、简单工厂、工厂方法)抽象工厂没讲
Class实例,就是一个运行实类。newInstance就能获取该运行时类的对象。一定要有空参构造器
静态代理------------
AOP原理 -动态代理-反射

代理对象把 被代理对象 包裹起来。经纪人把明星包裹起来。

同一个接口

翻译
1. 根据明星创建其经纪人 ===> Proxy.newProxyInstance
2. 经纪人安排明星干活-- 接口的实现 handler


动态代理使用,任意对象都可以动态代理。一套代码无限使用。

2.注解
标记注解 @Override
可在 编译,类加载,运行时 读取
框架 = 注解 + 反射 + 设计模式
a文档注解-生成文档
b编译时 有格式检查 (JDK内置3个注解) 重写,废弃,抑制
c跟踪代码依赖性,实现替代配置文件
声明: @interface 自定义注解

反射可以获取注解。加载到内存里,反射读取,XX.class.getAnnotations()
自定义注解 必须配上注解的 信息处理流程(反射) 才有意义。


最后加载到内存里,反射读取,XX.class.getAnnotations()
元注解-- 定义注解的注解


注解 新特性-可重复注解(+ 元注解 @Repeatable())


注解 新特性-类型注解, +两个范围,类型参数上(类泛型声明) + 任意类型声明位置上
自己new 创建对象+调用方法 --> 简单工厂模式 调用总工厂获取对象 + 调用方法
若增加新擦混产品,会违反开闭原则-要修改类
工厂方法 --接口定义--各自工厂
抽象类--模板方法--谁调用,谁就是this(谁里有实现)。 像个钩子--回调方法

3.泛型 -实例化时指明。

类,接口 声明时使用了泛型KTVE,当实例化时指明了什么类型,生成的对象内部结构里都会变成实例化时的指定类型(用到的地方=属性+构造器+方法入参返回等)。
声明泛型,实例化时,指明泛型类型,对象就是指定类型的对象。

泛型即传入实际的类型参数,也称为类型实参
泛型类<T>,接口<T>
一个类 还有一个或多个不确定的 属性, 使用<T>,类的内部结构就可以使用泛型。
T相当于变量,实例化的时候才赋值。这个泛型属性T可以 让使用者自由发挥。这个T是个黄牛,等着接盘类来买票
就把T想象成包装类就很容理解,this表示对象,泛型表示类。
子类继承时,指明泛型类,就不是泛型了,实例化时就不用指明,反之需要指明。参考list--arrayList。



子类可用可不用父类泛型。

(静态方法不能使用类的泛型,静态-类加载要用,类泛型-实例化时才指明类型)
方法泛型 -- (方法里没有<E>,E会被认为类)==可静态,调用时才确定。
注意 方法类泛型 与 方法泛型。一个实例化(类泛型),一个调用时(方法泛型)。
方法用类的泛型,不是泛型方法。
类与方法,泛型各玩各的。

泛型方法定义<E>

类的泛形随着构造器的加载而加载,所以不能为static,方法的泛形不跟着构造器,可以声明为static,跟着类加载

在泛型方法前面加<E>是告诉编译器,我这是个泛型方法,不是有个类是E,而 public class demo<E>{},则是声明我里面有个类是E类型
我感觉代码和运行分开了 这是目的。弹幕-DAO-mybaties

并列 关系--- 引起重载 -- 通配符可以解决泛型继承问题。



<E>是未知类型,只有使用时才确定类型。? 通配符比泛型更抽象。List<?> 不能使用add。不能确定类型。

你做3个类,分别为A→B→C,A是父类。如果用C的集合去add一个B的对象,就是不对的了。
读取看上限,写入看下限。没有下限,谁是下限。
同样的!下面的super,?是最小的类被定死了就是person,所以根据子类可以赋给父类,可以赋值一个student或者person,但是,不能赋值一个比person大的类,父类不能赋给子类嘛
读看上限,写看下限
最核心的一点就是父类不能赋值给子类,子类可以赋值给父类。多态--> super 能add 下限的子类, extends 不能放上限的子类。
只要知道 父类不能赋值给子类就行,extend Person 不行是因为会出现 父类 赋值子类的现象

有了泛型,很多相似工具类,就可以变一个公共工具类,然后被很多其他类使用了。
浙公网安备 33010602011771号