首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >动态加载与延迟加载

动态加载与延迟加载
EN

Stack Overflow用户
提问于 2013-06-21 05:14:08
回答 2查看 809关注 0票数 0

我只知道动态代理用于AOP。

然而,我不能理解这与普通的存取器有什么不同,在这里“懒惰”加载到底是什么?

如果能帮助我们理解作者所说的延迟加载是什么意思,我们将非常感谢。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Category tupleToObject(Serializable[] tuple) {    
    Category category = new Category((String)tuple[1],
        (YearMonthDay) tuple[2]);
        category.setId((Long) tuple[0]);
    category.setParent(lazyGet((Long) tuple[3]));
    return category;
}


protected CategoryItf lazyGet(Long id) {    
    if (id == null) {        
    return null;    
    }    
    return (CategoryItf)Proxy.newProxyInstance( 
        CategoryItf.class.getClassLoader(),
        new Class[] { CategoryItf.class },
        new LazyLoadedObject() {
            protected Object loadObject() {
                return get(id);
            }        
    });
}


public abstract class LazyLoadedObject    implements InvocationHandler {
    private Object target;
    public Object invoke(Object proxy,
                         Method method, Object[] args)
                  throws Throwable {
        if (target == null) {
            target = loadObject();
        }
        return method.invoke(target, args);
    }
    protected abstract Object loadObject();
}

这和下面的有什么不同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Category tupleToObject(Serializable[] tuple) {    
    Category category = new Category((String)tuple[1],
        (YearMonthDay) tuple[2]);
        category.setId((Long) tuple[0]);
    category.setParent(get((Long) tuple[3]));
    return category;
}
EN

回答 2

Stack Overflow用户

发布于 2013-06-21 05:20:14

下面的代码片段使得实现变得“懒惰”:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Object target;
public Object invoke(Object proxy,
                     Method method, Object[] args)
              throws Throwable {
    if (target == null) {
        target = loadObject();
    }

您可以看到,无论您调用此代码多少次,每次都会得到相同的对象。所以,实际上它是单例的。然而,它不是在程序开始时创建的,而是在第一次需要它时创建的。这就是“懒惰”的意思。

票数 0
EN

Stack Overflow用户

发布于 2013-06-21 07:05:23

让我试着解释一下我是如何理解代码的:

在此代码中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Category tupleToObject(Serializable[] tuple) {    
    Category category = new Category((String)tuple[1],
        (YearMonthDay) tuple[2]);
        category.setId((Long) tuple[0]);
    category.setParent(get((Long) tuple[3]));
    return category;
}

get()方法将直接返回实际的对象,因此调用tupleToObject()将用实际的对象填充类别父对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Category tupleToObject(Serializable[] tuple) {    
    Category category = new Category((String)tuple[1],
        (YearMonthDay) tuple[2]);
        category.setId((Long) tuple[0]);
    category.setParent(lazyGet((Long) tuple[3]));
    return category;
}

lazyGet()方法实际上返回一个代理(而不是实际的对象)。代理上的第一个方法调用实际上将触发对象的加载。这里的代理用于延迟实际对象的实际检索,直到它真正需要时,即延迟加载。

希望这能回答你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17228106

复制
相关文章
mybatis 延迟加载(懒加载)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
2.1K0
WordPress图片延迟加载(懒加载)
如果不进行设置的话,一个页面会一次性加载所有的资源数据,考虑到不可能所有访客会全部将页面看完,也会导致流量的浪费,加载体验上有待提升。这里就采用延迟加载的方案。
Diuut
2022/11/22
2.5K0
WordPress图片延迟加载(懒加载)
ViewStub延迟加载
在项目中,难免会遇到这种需求,在程序运行时需要动态根据条件来决定显示哪个View或某个布局,最通常的想法就是把需要动态显示的View都先写在布局中,然后把它们的可见性设为View.GONE,最后在代码中通过控制View.VISIABLE动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。但是它的缺点就是,耗费资源,虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。
全栈程序员站长
2022/09/13
1.6K0
ViewStub延迟加载
Hibernate延迟加载
上一篇文章我们学习了Hibernate的多表关联关系,这里就涉及到一个很实用的概念:延迟加载或者也叫惰性加载,懒加载。使用延迟加载可以提高程序的运行效率。Java程序与数据库交互的频次越低,程序运行效率越高,所以我们应该尽量减少Java程序与数据库的交互次数,Hibernate延迟加载就很好的做到了这一点。
南风
2019/04/22
1.5K0
Hibernate延迟加载
图片延迟加载
官网:http://www.appelsiini.net/projects/lazyload 使用例子:http://demo.phpfs.com/lazyload/ 代码下载:lazyload 代码解析 $(function(){ var ERROR_IMG = './img/image_err.gif'; var LOADER_IMG = './img/lazy_loading.gif'; $("img").one("error", function() { $(this).attr("src
苦咖啡
2018/05/08
2.2K0
前端延迟加载
由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。
ydymz
2018/11/09
1.1K0
CNZZ延迟加载,解决加载缓慢问题
相信绝大部分的站长都是在站点上部署了CNZZ的站点访问统计吧,不过CNZZ的JS在每次加载页面的时候总是要加载那么1~3秒,甚至更长,其原因就是:本来页面都已经加载完成了,又非要多加载那么几秒,这样可能导致用户以为网站打开很慢呢,于是就会出现丢失访客等等一些列啪啦的问题。
墨渊
2018/05/11
3.1K4
Mybatis关联(嵌套)查询与延迟加载
我们在查询业务数据的时候经常会遇到关联查询的情况,比如查询员工就会关联部门(一对一),查询学生成绩就会关联课程(一对一),查询订单就会关联商品(一对多),等等。
向着百万年薪努力的小赵
2022/12/02
4160
Mybatis关联(嵌套)查询与延迟加载
hibernate延迟加载详解
hibernate延迟加载详解 Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能。 下面先来剖析 Hibernate 延迟加载的“秘密”。 集合属性的延迟加载 当 Hibernate 从数据库中初始化某个持久化实体时,该实体的集合属性是否随持久化类一起初始化呢?如果集合属性里包含十万,甚至百万的记录,在初始化持久化实体的同时,完成所有集合属性
Java帮帮
2018/03/19
1.4K0
hibernate延迟加载详解
MyBatis-延迟加载
就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载。
星哥玩云
2022/09/14
1K0
BaseFragment 延迟加载lazyload
注意1:在某些时候setContentView(V)可能会引发null 异常就需要调用setContentView(V,T)
用户4458175
2020/02/12
1.3K0
Mybatis 延迟加载探究
Mybatis 是一个广泛用于 Java 应用程序中的持久层框架,它提供了一种方便的方式来管理数据库操作。在实际应用中,很多情况下我们需要处理大量的数据,而且并不总是需要一次性加载所有相关数据,这时候延迟加载(Lazy Loading)就显得尤为重要。本文将探讨 Mybatis 是否支持延迟加载,以及它的实现原理。
疯狂的KK
2023/09/26
4930
Mybatis 延迟加载探究
Hibernate之延迟加载
文章目录 1. hibernate之延迟加载 1.1. 什么是延迟加载 1.2. 好处 1.3. 如何使用延迟加载 1.4. 使用延迟加载需要注意的问题 hibernate之延迟加载 什么是延迟加载 在使用某些Hibernate方法查询数据的时候,Hibernate返回的只是一个空对象(除了id外属性都为null),并没有真正的查询数据库。而是在使用这个对象的时候才会出发查询数据,并将查询到的数据注入到这个空对象中,这种查询时机推迟到对象访问时的机制称之为延迟加载。 简单的说,使用延迟加载获取的对象,只
爱撒谎的男孩
2019/12/31
9320
mybatis的延迟加载
OrderMapper.xml文件的配置: <!-- 2 延迟加载resultMap的配置 --> <resultMap type="com.shi.pojo.Order" id="selectOrderLazyLodingFindUser"> <!-- 对订单信息进行映射配置 --> <id column="id" property="id"/> <result column="user_id" property="user_id"/> <result column="number"
用户5927264
2019/07/31
1.2K0
MyBatis延迟加载(二)
除了基于代理对象的延迟加载外,MyBatis还提供了基于XML配置的延迟加载方式。在这种方式中,我们需要在MyBatis映射文件中为查询语句配置一个<resultMap>元素,并在该元素中为需要延迟加载的属性添加<association>或<collection>元素。这些元素用于指定需要延迟加载的关联对象属性和延迟加载类型。
堕落飞鸟
2023/05/15
4190
Mybatis的延迟加载
1.什么是延迟加载 在真正需要使用数据时才发起查询,不用的时候不进行查询。按需加载(懒加载) 2. 什么是立即加载 不管用不用,只要一调用方法,马上发起查询。
暴躁的程序猿
2022/03/23
7600
Mybatis的延迟加载
MyBatis延迟加载(一)
MyBatis是一个轻量级的ORM框架,它提供了多种方式来优化SQL查询。其中一种常见的优化技术是延迟加载(lazy loading),它允许在需要时才从数据库中加载相关的数据,从而避免不必要的性能损失和内存消耗。
堕落飞鸟
2023/05/15
5410
Hibernate 的延迟加载(懒加载)简介1
什么是延迟加载: 在使用某些Hibernate方法查询数据时,Hibernate返回的只是一个空对象(除id外属性都为null),并没有真正查询数据库。而在使用这个对象时才会触发查询数据库,并将查询到的数据注入到这个空对象中。这种将查询时机推迟到对象访问时的机制称之为延迟加载。 ---- 为什么要使用延迟加载: 可以提升内存资源的使用率 可以降低对数据库的访问次数 ---- 采用延迟加载的方法: session.load() 查询时不进行SQL查询,在使用对象时才执行SQL查询;效率高 query.i
qubianzhong
2018/08/10
1.4K0
MyBatis 延迟加载(懒加载)一篇入门
前面一篇文章,介绍了多表查询,在实际使用中,我们会经常性的涉及到多表联合查询,但是有时候,并不会立即用到所有的查询结果,我来举两个例子:
BWH_Steven
2020/02/20
6.7K4
Ajax与DOM实现动态加载
首先说下问题背景:想要通过异步请求一个文本文件,然后通过该文件的内容动态创建一个DOM节点添加到网页中。 基于这个需要了解: 1 DOM如何动态添加节点   2 Ajax异步请求   3 Chrome浏览器如何处理本地请求   DOM如何动态添加节点   想要动态的添加节点,就需要良好的理解DOM文档。   常用的几个方法:   getElementById()  getElementsByTagName() getAttribute() setAttribute()   以及   crea
用户1154259
2018/01/17
1.6K0
Ajax与DOM实现动态加载

相似问题

角5延迟加载与动态加载

31

延迟加载与紧急加载

82

延迟加载:无法加载动态模块

121

动态加载延迟路由

11

延迟加载/动态绑定与安全性

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文