Spring的默认行为为lazy-init
我是初学者,spring,ESP反转控制。 我很困惑理解以下的区别
<bean id="demo" class="Demo" lazy-init="false"/> <bean id="demo" class="Demo" lazy-init="true"/> <bean id="demo" class="Demo" lazy-init="default"/>
据我的理解:lazy-init = false在启动时创buildbean,lazy-init = true不会在启动时创build一个bean,而是根据请求创build一个特定的bean。 在这里纠正我,如果我的解释是错误的。
lazy-init的默认行为是什么? 它将如何实例化?
默认行为是false:
默认情况下,ApplicationContext实现是作为初始化过程的一部分,急切地创build和configuration所有的singleton bean。 通常,这种预先实例化是可取的,因为configuration或周围环境中的错误被立即发现,而不是数小时甚至数天后。 当这种行为不可取时,可以通过将bean定义标记为lazy-initialized来防止单例bean的预先实例化。 一个惰性初始化的bean告诉IoC容器在第一次请求时创build一个bean实例,而不是在启动时。
我build议阅读
bean上的lazy-init="default"
设置只能引用由封闭beans元素的default-lazy-init
属性设置的内容。 default-lazy-init
的隐式默认值是false
。
如果在bean上没有指定lazy-init
属性,它总是被急切地实例化。
对于那些来到这里并正在使用Javaconfiguration的用户,可以使用如下所示的批注将Bean设置为lazy-init:
在configuration类中:
@Configuration // @Lazy - For all Beans to load lazily public class AppConf { @Bean @Lazy public Demo demo() { return new Demo(); } }
对于组件扫描和自动布线:
@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; ....... }
lazy-init是bean的属性。 lazy-init的值可以是true和false。 如果lazy-init为true ,那么在向bean发出请求时,该bean将被初始化。 这个bean在初始化spring容器的时候不会被初始化, 如果lazy-init是false,那么这个bean将被初始化为spring容器。
当我们使用lazy-init =“default”作为元素中的一个属性时,容器拾取由元素的default-lazy-init =“true | false”属性指定的值 ,并将其作为lazy-init =“true | false ”。
如果元素中不存在default-lazy-init属性,则元素中的lazy-init =“default”的行为就像lazy-init-“false”一样。
- java.lang.ClassNotFoundException:org.springframework.web.servlet.DispatcherServlet
- servlet中的<mvc:annotation-driven />和<context:annotation-config />有什么区别?
- 如何让春季将价值注入静态领域
- 在Spring MVC控制器中从安全上下文获取UserDetails对象
- 以编程方式closuresSpring Boot应用程序
- JPA vs Spring JdbcTemplate
- Spring和Spring MVC框架有什么区别?
- 我该如何告诉Spring Boot可执行jar使用哪个主类?
- 为什么在Java EE中使用CDI?