Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式程序员
主题数据库
概念工具
Hibernate 延迟加载的代理模式性能
Spring AOP的代理模式spa
区别和联系代理
静态代理和动态代理日志
概念对象
代理模式是为其余对象提供一种代理以控制对这个对象的访问。事务
Hibernate 延迟加载的代理模式内存
Hibernate 延迟加载中用到了代理模式:从数据库中得到数据初始化持久化实体对象时,不加载实体对象的集合属性的相关数据,直到系统须要集合属性的数据时,才从数据库中获取相关记录并赋值给集合属性。
Hibernate 延迟加载使用代理模式的意义:若是集合属性关联的记录成百万记,在初始化持久化实体对象时就加载集合属性会有很大的内存开销,形成性能降低。因此选择延迟加载,须要时再从数据库中获取集合属性关联的记录,以减小内存开销,提升性能。
Spring AOP的代理模式
Spring AOP中用到了代理模式:AOP动态代理。AOP代理能够替代目标对象,代理对象中包含了目标对象的全部方法,可是代理对象在对应的目标对象方法执行代码先后加了一些通用功能的代码,好比日志记录,权限检查,事务管理等等。
Spring AOP使用代理的意义:代理对象加强了目标对象的功能。
区别和联系
Hibernate的延迟加载和Spring的AOP都体现了代理模式,可是使用场景不同,即便用代理的目的不同。Hibernate延迟加载是为了减小系统开销,出于性能考虑;Spring AOP是为了增长目标类的功能,代理类就是在目标类方法的执行代码先后加上一些代码以增长通用功能。
静态代理和动态代理
静态代理:由程序员建立或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行期间,经过反射机制动态生成代理类。