04-Spring组件注册-@Lazy懒加载

主宰稳场 提交于 2019-12-12 02:35:52

通过 @Lazy 实现 bean 的延迟加载

只支持单实例

默认单实例是在项目启动时创建对象,通过@Lazy可以在bean第一次使用的时候创建对象

编写配置类

package com.demon.config;

import com.demon.bean.User;
import org.springframework.context.annotation.*;
import org.springframework.web.context.WebApplicationContext;

/**
 * 配置类
 * @author Demon-HY
 * @date 2019-12-9
 */
@ComponentScan(value = "com.demon")
@Configuration
public class Config2 {

    /**
     * 给 Spring 容器注册一个 bean, bean 的 id 默认是方法名</br>
     * 可以手动指定id: @Bean("方法名")
     */
    // 懒加载
    @Lazy
    @Bean("user")
    public User user() {
        // 观察懒加载效果
        System.out.println("User 实例初始化");
        return new User("Demon-HY", 18);
    }
}

编写测试用例

package com.demon;

import com.demon.bean.User;
import com.demon.config.Config;
import com.demon.config.Config2;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @author Demon-HY
 * @date 2019-12-9
 */
public class IOCTest {

    // 测试 @Lazy 懒加载
    @Test
    public void test3() {
        // 通过注解方式生成 Spring 上下文
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config2.class);
        // 打印容器中注册的bean
        System.out.println("容器创建完成");

        User user1 = context.getBean(User.class);
        
        // 打印
        // 容器创建完成
        // User 实例初始化
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!