Java成神之路(十)反射与代理

本文介绍了工厂模式和反射的概念及其应用。工厂模式通过静态函数代替new操作符,根据参数返回子类实例;反射则允许程序在运行时动态加载类并获取其信息。此外,还讨论了静态代理与动态代理的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反射:

  1. 工厂模式,反射,作用
    工厂模式:代替new,利用静态函数的形式,根据参数返回新建的子实例,抽象工厂模式,就是核心类只提供抽象的工厂接口。抽象工厂中有具体工厂,具体工厂中有抽象产品,抽象产品中有具体产品。隔离了具体类的产生。
    反射:在运行状态下,可以动态加载一个只有名称的类,在堆内存中,有一个class类型的对象,这个对象包含了完成的结构信息,通过它,可以看到类的结构,如同镜子。Class对象是在需要的时候才会加载,但static初始化是在类加载时进行的。反射受class类与reflect的支持。
    作用:动态的获取类的信息,检测和修改它本身的。
  2. Class类,java.lang.reflect.*
    我们无法自主创建Class类对象,它是在类被调用时由Java虚拟机自动创建的。Class.forname()方法返回一个对应类的class对象。
    java.lang.reflect.*包提供了获取类和对象的反射信息的类与接口,他和class类都是通过jvm创建加载的。

二:代理

  1. 动态代理与静态代理
    将具体的实现同调用方进行解偶,通过面向接口进行编码,将所有的具体实现隐藏在内部。
    创建接口—创建具体类实现接口,创建代理类实现接口。具体类需要实现逻辑,代理类调用具体类的具体方法。
    静态代理:在编译期间就把所有的接口,类,代理类全部完成。
    动态代理:在需要的时候进行代理类的创建。利用反射来实现动态代理,即不需要知道什么时候创建,代理哪个。
    通过实现InvocationHandler接口,里有个invoke(代理实例,调用方法,方法的参数列表)方法,在代理类的构造器中传递具体类的对象如:
    Privte Object object;//接受具体类
    Public dy(Object obj){this.object=obj}//带参数的构造器传递具体实现类的对象。
    InvocationHandler进行方法块的调用,而动态代理实例和类是有Proxy完成的。
    Proxy的静态方法getProxyClass(xx.class.getClassLoader()(类加载器),接口列表数组)生成代理类ProxyClass,在通过反射,调用代理类的构造器来生成代理实例:XX xx=(XX)procyClass.getConstructor(InvocationHandler.class).newInstance(重写的invocationHandler)
    利用Cglib也可以通过面向继承的方式进行动态代理。
  2. AOP
    面向切面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的前提下动态着给程序统一添加功能的一种技术。主要使用它做日志记录,性能统计,安全控制,事物管理,在动态管理代码模块中添加
    一些有用的代码(日志,性能统计等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值