反射和动态代理

反射:

        反射(Reflection)是 Java 语言中一个非常强大的特性,它允许程序在运行时自我检查和操作。通过反射,你可以动态地获取类的信息(例如,类的构造函数、方法、字段)并可以在运行时创建对象、调用方法和访问字段。 程序运行时通过jvm的class对象获取到某类的所有方法,成员变量等。 ​ 方法:Class.forname(“路径”) 通过对该对象的class对象进行实例。

     // 获取类对象
            Class<?> clazz = Class.forName("com.example.MyClass");
     // 获取构造方法并创建对象
        Constructor<?> constructor = clazz.getConstructor(String.class);
        Object obj = constructor.newInstance("example");
​
        // 获取并调用方法
        Method method = clazz.getMethod("myMethod", String.class);
        method.invoke(obj, "hello");
​
        // 获取并修改字段
        Field field = clazz.getDeclaredField("myField");
        //(设置私有字段为可修改)
        field.setAccessible(true);
        field.set(obj, "new value");
        Object value = field.get(obj);
        System.out.println("Field value: " + value);
​
    } 
class MyClass {
    private String myField;
public MyClass(String myField) {
    this.myField = myField;
}
​
public void myMethod(String msg) {
    System.out.println("MyMethod called with: " + msg);
}

}

动态代理:

        运用反射的思想,在运行时创建对象,并将方法调用重定向到不同的实际对象。对某一类功能增强。通过代理对象可以实现横切关注点(如日志,事务管理,安全性等),与业务逻辑代码解耦。 ​ 静态代理即和需要增强的类继承同样的接口,在此中进行对其进行实例,增加业务逻辑,实际就是静态包裹 住该类。 ​ 动态代理即用proxy生成代理类实例-通过newProxyInstance()方法,代理类持有InvocationHandle类实例,InvocationHandle持有待增强类的 实例,通过调用代理类的方法(反射),InvocationHandle对此方法进行拦截,实现增强的业务逻辑,

(在其invoke方法体中 增强的业务逻辑+方法调用)处理。 其中 proxy参数:classloader 继承接口列表 handle类(调用处理器) 其中 handle中invoke参数 : proxy(代理实体) 方法 方法入参

 AOP:

        即动态代理思想,使用aop即定义切面,切点 aspect execution 通过在这种切面类定义此两项可以定位到需要aop的实现类 在切面类中通过注解@After等即可完成对实现类的前置后置等通知。

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值