zoukankan      html  css  js  c++  java
  • spring Bean的生命周期管理

    Spring中bean的生命周期管理可以在xml配置文件(一般叫bean.xml或ApplicationContext.xml)中通过scope属性进行控制。当scope属性默认的为singleton(单例),这个时候bean是在spring容器启动的时候进行加载和实例化并且是单实例的;当你将scope属性改为prototype的时候,这种情况下bean将在bean被调用时实例化并且每次调用生成一个bean的实例。(request,session,global session属性将在web变成是再学习)
     
    lazy-init属性默认为false,即在spring容器启动时加载并实例化配置文件中定义的所有 bean,当然当我们指定为true的时候,bean将在程序调用的时候才初始化,该属性定义在<bean>中。当你希望每个bean都拥有相同的lazy-init属性,这时你可以在<beans>中定义global-lazy-init属性进行指定。
     
    同时可以指定bean的初始化方法init-method属性和销毁方法destroy-method属性。
     
    作用域范围是单例的bean是在实例化容器的时候就实例化。
     
    作用域范围是prototype的bean是在getBean的时候被实例化的。
     
    作用与范围是单实例并且lazy-init="true",是在getBean的时候被实例化的。
     
    也可以指定beans节点的属性default-lazy-init=true
     
    lazy-init的缺点是不能再启动时发现实例化的错误,只能在运行期发现,这点是我们不太希望看到的
     
    如果在生成bean时需要对某些资源进行初始化,可以指定init-method="init",方法名指定为类里面的方法名。此方法是在实例化过后执行。如果在bean被销毁前要关闭一些资源,可以指定destroy-method="destroy"
     
    需要调用spring容器的close方法进行关闭才能执行销毁方法,与前面代码有一定不同。
     
    AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
     
    ctx.close();

     
    Bean的生命周期:
     
    (1)实例化(必须的)构造函数构造对象
     
    (2)装配(可选的)为属性赋值
     
    (3)回调(可选的)(容器-控制类和组件-回调类)
     
    (4)初始化(init-method=" ")
     
    (5)就绪
     
    (6)销毁(destroy-method=" ")


     

  • 相关阅读:
    python—logger
    print默认在末尾添加一个换行符,但其实也可以不用!
    Python做int()强制类型转换的时候,小数是如何取舍的?
    Python基础之好玩的字符串格式化f-string格式
    【奔走相告】- Github送福利:用户可免费创建私有代码库啦
    我30岁了,转行学编程可以吗? 排除法告诉你答案
    Python基础之好玩的字符串格式化之类C风格
    Python基础之白话说函数
    变量 和 注释
    什么是编程语言,什么是Python解释器
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3041162.html
Copyright © 2011-2022 走看看