1.懒加载的简介
懒加载,顾名思义它很懒,只有用的时候才会加载
在Web的应用程序中,响应速度一直是系统瓶颈需关注的问题.若响应速度过慢,用户就会不高兴啦,系统的价值就会变低,所以提高响应速度是很重要的.那么怎么能提高响应速度呢(带着问题继续看)
Web应用程序做的最多事情是什么呢?是和后台数据交互,而查询数据库是非常耗时的过程,当数据库里记录过多时,查询优化更显得尤为重要.为了解决这种问题,有人提出了缓存的概念。缓存就是将用户频繁使用的数据放在内存中以便快速访问.在用户执行一次查询操作后,查询的记录会放在缓存中,当用户再次查询时,系统会首先从缓存中读取,如果缓存中没有,再查询数据库,缓存技术在一定程度上提升了系统性能,但是当数据量过大时,缓存就不太合适了,因为内存容量有限,把过多的数据放在内存中,会影响电脑性能.这是我们就可以用懒加载的机制解决
2.Spring中的懒加载机制
2.1 懒加载说明
对于创建对象而言
1.如果Spring容器创建,对象立即创建,则该加载方式为"立即创建" 容器启动创建
2.如果Spring容器创建,对象在使用时才创建,则称为"懒加载" 用时才创建
@lazy注解:表示改为懒加载
2.2 单例和多例时的懒加载
说明:在单例模式中需要手动设置懒加载,而多例模式中全都是懒加载
规则:
单例模式:
多例模式:
2.3 懒加载的应用场景
1. 服务器启动时,如果加载太多的资源,则必然导致服务器启动慢, 将不重要的资源设置为懒加载.
2. 有时用户会需要一些特殊的"链接",而这些链接的创建需要很长的时间.可以使用懒加载.
3.入门案例
3.1 创建user类
package com.jt.demo;
public class User {
public User(){
System.out.println("我是无参构造,创建小对象");
}
public void say(){
System.out.println("测试单例还是多例");
}
}
3.2 创建配置类SpringConfig
@Scope注解:来标注单例模式还是多例模式
package com.jt.config;
import com.jt.demo.User;
import org.springframework.context.annotation.*;
@Configuration
@ComponentScan("com.jt")
public class SpringConfig {
@Bean
@Scope("singleton")
@Lazy
public User user(){
return new User();
}
}
3.3 创建测试类TestSpring
package com.jt;
import com.jt.config.SpringConfig;
import com.jt.demo.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestSpring {
@Test
public void testDemo(){
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
User user = context.getBean(User.class);
User user1 = context.getBean(User.class);
user.say();
System.out.println(user==user1);
}
}
3.4 通过debug测试
通过debug来测试当单例懒加载和非懒加载都在什么时候创建对象
单例模式懒加载时:当调用方法的时候才会创建对象,
单例模式非懒加载:运行时就创建了对象