面试题答案
一键面试- 代理对象创建阶段:
- 主要作用:根据业务需求,通过动态代理(如Java的
Proxy
类结合InvocationHandler
)或静态代理(手动编写代理类继承相同接口)的方式创建代理对象。在动态代理中,Proxy.newProxyInstance
方法接受类加载器、接口数组和InvocationHandler
实例来生成代理对象,该对象实现了指定接口,其方法调用会转发给InvocationHandler
的invoke
方法;静态代理则是在编译期就确定代理类的代码,代理类持有被代理对象的引用,在代理方法中调用被代理对象的相应方法,此阶段为后续对目标对象的代理访问做准备。
- 主要作用:根据业务需求,通过动态代理(如Java的
- 代理对象使用阶段:
- 主要作用:当客户端调用代理对象的方法时,代理对象会对请求进行预处理,如权限检查、日志记录等操作。对于动态代理,
InvocationHandler
的invoke
方法执行这些预处理逻辑,然后通过反射调用目标对象的实际方法,之后还可能进行后处理操作,如结果校验、统计方法执行时间等;静态代理同样在代理方法中先执行自定义的逻辑,再调用目标对象方法并可进行后处理,这个阶段实现了对目标对象功能的增强或控制。
- 主要作用:当客户端调用代理对象的方法时,代理对象会对请求进行预处理,如权限检查、日志记录等操作。对于动态代理,
- 代理对象销毁阶段:
- 主要作用:当代理对象不再被使用,其生命周期结束时,Java的垃圾回收机制会回收代理对象占用的内存资源。如果代理对象在运行过程中有一些需要清理的资源(如打开的文件句柄、数据库连接等),可以在相关资源管理逻辑中进行关闭或释放操作,以确保系统资源的合理利用和避免资源泄漏。