Java基础-反射、注解、静态/动态代理

目录

 

反射

含义

使用

作用

注解

含义

格式

元注解

本质

使用

实例

作用

动态代理

含义

实例:

cglib动态代理

cglib实例:


反射

含义

        每个类都在内存中保留有相应信息,这些信息保存于泛型类Class<?>中,每个实例或者静态类都可以动态获取Class<?>对象,从而在运行时知道对象类的内部信息,称之为反射。

使用

1.如果知道类名,可以直接通过类名.class获取Class<?>

2.Object下有一个getClass()方法返回一个Class<?>

3.Class类有一个静态方法forName(String name)可以通过类的名称返回Class<?>

作用

运行时动态获取类的具体信息,使用Class.forName()还可以将某个类直接加载到内存,常用于驱动器的加载

注解

含义

        所谓注解,就是元数据(描述数据的数据),与注释不同,注解可以联合反射对注解所声明的类、字段、方法进行动态检验,执行代码等一系列操作。

如@Override,表明该方法必须被重写,否则直接报错。

注解为java注入元编程的能力,注解大量应用于各种框架,用于简化配置,提高灵活性,进一步抽象代码。

格式

public @interface 注解名称{
    属性列表;
}

元注解

元注解,即注解的注解,定义一个注解实际上还是继承了接口Annotation,要想更方便使用注解必须约束注解的行为,即注解约束数据,元注解约束注解。

@Target() 用于约束注解的作用域,使用枚举ElementType选择,如果选择多个则使用{},如

    @Target({ElementType.METHOD,ElementType.FIELD})

@Retention()用于约束注解的保留时间段,有三个,使用RetentionPolicy选择,如果想通过反射获取注解信息则必须保留到运行时,即选择RUNTIME

     @Retention(RetentionPolicy.RUNTIME)

@Inherited() 约束注解是否可以被继承,默认不继承,即父类有注解,但子类没有,子类默认不继承注解

本质

注解的本质是接口,所写的注解会被自动编译成接口interface并继承接口Annotation。

既然是接口,自然可以在内部声明抽象方法,但使用注解时可以给内部的方法名赋值,如

定义注解:

public @interface Lsl {
    int getAge();
}
使用时就可以直接这样写@Lsl(getAge = 18),直接就
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值