美文网首页
使用 Spring 中的 @Lazy 注解

使用 Spring 中的 @Lazy 注解

作者: 光剑书架上的书 | 来源:发表于2021-02-23 17:31 被阅读0次

    @Lazy注解用于标识 bean 是否需要延迟加载:

    @Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Lazy {
        /**
         * Whether lazy initialization should occur.
         */
        boolean value() default true;
    }
    

    只有一个参数,默认是true,也就是说只要加了这个注解就会延迟加载。
    @Lazy注解则必须在第一次调用的时候才会加载。
    @Lazy注解注解的作用主要是减少springIOC容器启动的加载时间。

    @Lazy注解可以用来解决 Requested bean is currently in creation 的问题 (https://www.cnblogs.com/zjhgx/p/12158698.html)。

    完整源码如下:

    /*
     * Copyright 2002-2013 the original author or authors.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      https://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package org.springframework.context.annotation;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * Indicates whether a bean is to be lazily initialized.
     *
     * <p>May be used on any class directly or indirectly annotated with {@link
     * org.springframework.stereotype.Component @Component} or on methods annotated with
     * {@link Bean @Bean}.
     *
     * <p>If this annotation is not present on a {@code @Component} or {@code @Bean} definition,
     * eager initialization will occur. If present and set to {@code true}, the {@code @Bean} or
     * {@code @Component} will not be initialized until referenced by another bean or explicitly
     * retrieved from the enclosing {@link org.springframework.beans.factory.BeanFactory
     * BeanFactory}. If present and set to {@code false}, the bean will be instantiated on
     * startup by bean factories that perform eager initialization of singletons.
     *
     * <p>If Lazy is present on a {@link Configuration @Configuration} class, this
     * indicates that all {@code @Bean} methods within that {@code @Configuration}
     * should be lazily initialized. If {@code @Lazy} is present and false on a {@code @Bean}
     * method within a {@code @Lazy}-annotated {@code @Configuration} class, this indicates
     * overriding the 'default lazy' behavior and that the bean should be eagerly initialized.
     *
     * <p>In addition to its role for component initialization, this annotation may also be placed
     * on injection points marked with {@link org.springframework.beans.factory.annotation.Autowired}
     * or {@link javax.inject.Inject}: In that context, it leads to the creation of a
     * lazy-resolution proxy for all affected dependencies, as an alternative to using
     * {@link org.springframework.beans.factory.ObjectFactory} or {@link javax.inject.Provider}.
     *
     * @author Chris Beams
     * @author Juergen Hoeller
     * @since 3.0
     * @see Primary
     * @see Bean
     * @see Configuration
     * @see org.springframework.stereotype.Component
     */
    @Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Lazy {
    
        /**
         * Whether lazy initialization should occur.
         */
        boolean value() default true;
    
    }
    
    

    相关文章

      网友评论

          本文标题:使用 Spring 中的 @Lazy 注解

          本文链接:https://www.haomeiwen.com/subject/suqdfltx.html