java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?

我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是而外功.好处是可以重复利用相同代码.

代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,...让应用开发者可以只关心自身业务.

静态代理:事先写好代码类,可以手工编写,也可以用工具生成.缺点是每个业务类都要有一个对应代理类,非常不灵活.

动态代理:运行时自动生成代理对象.缺点是生成代理对象和调用代理对象都要额外花费时间,

JDK动态代理:基于java反射机制实现,必须要实现了接口的业务类才能用这种办法生成代理对象.新版本也开始结合ASM机制.

cglib动态代理:基于ASM机制实现,通过生成业务类的子类作为代理类..

java反射机制的常见应用:动态代理(AOP,RPC),提供第三方开发者拓展能力(Servlet容器,JDBC连接),第三方组件创建对象(DI)...

反射与动态代理原理:

反射最大的作用之一就在于我们可以不在编译时知道某个对象的类型,而在运行时提供完整的"包名+类名.class"得到.注意:不在编译时,而是在运行时.

功能:

#在运行时能判断任意一个对象所属的类.

#在运行时能构造任意一个类的对象

#在运行时能获得任意一个类所具有的的成员变量和方法.

#在运行时调用任意一个对象的方法.简单说,利用java反射机制我们可以加载一个运行时才得知名称的class,获悉其构造方法,并生成其对象实体,能对其fields设置并唤起其methods.

应用场景:

反射技术常用在各类通用框架开发中.因为为了保证框架的通用性,需要根据配置文件加载不同的对象和类,并调用不同的方法,这个时候就会用到反射---运行时动态加载需要加载的对象.

特点:

由于反射会额外消耗一定的系统资源,因此如果不需要动态的创建一个对象,那么就不需要用反射.另外,反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题.

猜你喜欢

转载自www.cnblogs.com/lanbofei/p/9120224.html