Spring default behavior for lazy-init

后端 未结 5 882
长发绾君心
长发绾君心 2020-12-07 20:00

I am beginner to spring, ESP Inversion of control. I was puzzled understanding the difference between the following

 

        
相关标签:
5条回答
  • 2020-12-07 20:30

    When we use lazy-init="default" as an attribute in element, the container picks up the value specified by default-lazy-init="true|false" attribute of element and uses it as lazy-init="true|false".

    If default-lazy-init attribute is not present in element than lazy-init="default" in element will behave as if lazy-init-"false".

    0 讨论(0)
  • 2020-12-07 20:37

    The default behaviour is false:

    By default, ApplicationContext implementations eagerly create and configure all singleton beans as part of the initialization process. Generally, this pre-instantiation is desirable, because errors in the configuration or surrounding environment are discovered immediately, as opposed to hours or even days later. When this behavior is not desirable, you can prevent pre-instantiation of a singleton bean by marking the bean definition as lazy-initialized. A lazy-initialized bean tells the IoC container to create a bean instance when it is first requested, rather than at startup.

    I suggest reading up

    0 讨论(0)
  • 2020-12-07 20:41

    lazy-init is the attribute of bean. The values of lazy-init can be true and false. If lazy-init is true, then that bean will be initialized when a request is made to bean. This bean will not be initialized when the spring container is initialized and if lazy-init is false then the bean will be initialized with the spring container initialization.

    0 讨论(0)
  • 2020-12-07 20:44

    For those coming here and are using Java config you can set the Bean to lazy-init using annotations like this:

    In the configuration class:

    @Configuration
    // @Lazy - For all Beans to load lazily
    public class AppConf {
    
        @Bean
        @Lazy
        public Demo demo() {
            return new Demo();
        }
    }
    

    For component scanning and auto-wiring:

    @Component
    @Lazy
    public class Demo {
        ....
        ....
    }
    
    @Component
    public class B {
    
        @Autowired
        @Lazy // If this is not here, Demo will still get eagerly instantiated to satisfy this request.
        private Demo demo;
    
        .......
     }
    
    0 讨论(0)
  • 2020-12-07 20:49

    The lazy-init="default" setting on a bean only refers to what is set by the default-lazy-init attribute of the enclosing beans element. The implicit default value of default-lazy-init is false.

    If there is no lazy-init attribute specified on a bean, it's always eagerly instantiated.

    0 讨论(0)
提交回复
热议问题