Spring Boot之Bean的懒加载

    科技2023-11-12  94

    一般情况下,Spring容器在启动的时候就会创建全部的Bean对象。懒加载可以使Bean对象在第一次使用时再加载,懒加载的实现可以使用@Lazy注解。下面通过一个例子来了解@Lazy注解的使用以及效果。

    现在有Student类:

    public class Student implements Serializable { private static final long serialVersionUID = -8501834904335726021L; private String sNumber; private String sName; private Integer sex; private String gradeId; private String birth; @Override public String toString() { return "Student{" + "sNumber='" + sNumber + '\'' + ", sName='" + sName + '\'' + ", sex=" + sex + ", gradeId='" + gradeId + '\'' + ", birth='" + birth + '\'' + '}'; } public String getsNumber() { return sNumber; } public void setsNumber(String sNumber) { this.sNumber = sNumber == null ? null : sNumber.trim(); } public String getsName() { return sName; } public void setsName(String sName) { this.sName = sName == null ? null : sName.trim(); } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public String getGradeId() { return gradeId; } public void setGradeId(String gradeId) { this.gradeId = gradeId == null ? null : gradeId.trim(); } public String getBirth() { return birth; } public void setBirth(String birth) { this.birth = birth == null ? null : birth.trim(); } }

    再创建一个@Configuration注解修饰的类,目的是为了在初始化Student对象时输出一些东西以让我们知道这个对象被初始化了。

    @Configuration public class BeanConfig { @Bean public Student student(){ System.out.println("Student is initing..."); return new Student(); } }

    测试类如下:

    public class BeanConfigTest extends HellospringbootApplicationTests { @Autowired private Student student; @Test public void studentTest(){ System.out.println("test begin..."); System.out.println(student.toString()); } }

    测试类输出结果如下:

    可以看到Student类是在容器启动时就加载成功了。为了实现懒加载,我们只需要在BeanConfig类上加上@Lazy注解即可。然后再次运行测试类输出如下:

    可以看到Student是在容器启动后使用该对象时才加载。

    Processed: 0.019, SQL: 8