@Lazy Bean懒加载

xml配置介绍

<!-- 向 ioc 容器中注入 Bean -->
<bean id="user" class="com.liuzhihang.domain.User" lazy-init="true">
    <property name="id" value="1"/>
    <property name="name" value="liuzhihang"/>
    <property name="age" value="25"/>
</bean>

可以在xml配置过程中指定 lazy-init 属性

注解的方式

@Configuration
@ComponentScan(value = "com.liuzhihang")
public class ApplicationContextConfig {

    /**
     * 注解 @Lazy 默认值 为 true
     * true ioc容器启动时 不立即创建 实例
     * false ioc容器在首次调用的时候才会创建实例
     * @return
     */
    @Lazy
    @Bean
    public User user() {

        System.out.println("********* ioc 容器中创建 user");
        return new User(2L, "liuzhihang", 25);
    }
}

测试

/**
 * @Description:
 * @Author: liuzhihang
 * @Date: 2018/5/15 23:06
 */
public class IOCTest {

    ApplicationContext applicationContext;

    @Before
    public void before() {
        System.out.println("开始引入配置类");
        applicationContext = new AnnotationConfigApplicationContext(ApplicationContextConfig.class);
    }

    /**
     * 测试懒加载
     */
    @Test
    public void lazyInitTest() {

        System.out.println("开始从容器中获取user");
        User user = applicationContext.getBean(User.class);
        System.out.println(user.toString());

    }
}

1.@Lazy(value = true) 默认, 控制台输出及结论

开始引入配置类
开始从容器中获取user
********* ioc 容器中创建 user
User{id=2, name='liuzhihang', age=25}

结论: 当为true时, 首次获取bean时才在容器中创建实例

2.@Lazy(value = false), 控制台输出及结论

开始引入配置类
********* ioc 容器中创建 user
开始从容器中获取user
User{id=2, name='liuzhihang', age=25}

结论: 当为false时, 容器启动时即创建实例


   版权声明

文章作者: liuzhihang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源!

评论
  目录