spring——(2)bean的配置项

属性 描述
class 这个属性是强制性的,并且指定用来创建 bean 的 bean 类。
name 这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。
scope 这个属性指定由特定的 bean 定义创建的对象的作用域
constructor-arg 它是用来注入依赖关系的,上一篇文章中说过
properties 用来注入依赖关系
autowiring mode 用来注入依赖关系
lazy-initialization mode 延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。
initialization 方法 在 bean 的所有必需的属性被容器设置之后,调用回调方法。
destruction 方法 当包含该 bean 的容器被销毁时,使用回调方法。它将会在 bean 的生命周期章节中进行讨论。

bean的作用域scope

当在 Spring 中定义一个 时,你必须声明该 bean 的作用域的选项。例如,为了强制 Spring 在每次需要时都产生一个新的 bean 实例,你应该声明 bean 的作用域的属性为 prototype。同理,如果你想让 Spring 在每次需要时都返回同一个bean实例,你应该声明 bean 的作用域的属性为 singleton。

  • singleton:默认属性,Spring的IOC容器中只存在一个该Bean的实例,每次请求都返回同一个地址的对象。
  • prototype:每次请求Bean都会创建一个新的实例,调用者负责Bean后续生命周期的管理。
  • request :每次HTTP请求都会产生一个新的Bean。
  • session:session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效。

bean的作用域设置直接在bean中添加:

<bean id="" class="" scope="singleton"></bean>

Bean 的生命周期

理解 Spring bean 的生命周期很容易。当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态。同样,当 bean 不再需要,并且从容器中移除时,可能需要做一些清除工作。
尽管还有一些在 Bean 实例化和销毁之间发生的活动,但是本章将只讨论两个重要的生命周期回调方法,它们在 bean 的初始化和销毁的时候是必需的。

实现生命周期回调有三种方式:

1.我们只要在bean中声明 init-method 和/或 destroy-method 参数 。init-method 属性指定一个方法,在实例化 bean 时,立即调用该方法。同样,destroy-method 指定一个方法,只有从容器中移除 bean 之后,才能调用该方法。例:

<bean id="" class="" init-method="init" destroy-method="Destroy"></bean>
public class ExampleBean {

    public void init() {

    }

    public void Destroy() {

    }
}

2.bean实现InitializingBean和DisposableBean 接口,实例bean时调用afterPropertiesSet() ,销毁时调用destroy(),例:

public class ExampleBean implements InitializingBean,DisposableBean {

    public void afterPropertiesSet() throws Exception {
        // TODO Auto-generated method stub

    }

    public void destroy() throws Exception {
        // TODO Auto-generated method stub

    }
}

3.我们在beans中声明default-init-method和/或 default-destroy-method 参数 。例:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd"
        default-init-method="defautInit" default-destroy-method="defaultDestroy">

</beans>
public class ExampleBean {

    public void defautInit() {

    }

    public void defaultDestroy() {

    }

}

上面的三种方法都能实现Bean 的生命周期,如果我们一起使用会怎么样呢?

public class ExampleBean implements InitializingBean,DisposableBean {

    public void afterPropertiesSet() throws Exception {
        // TODO Auto-generated method stub

    }

    public void destroy() throws Exception {
        // TODO Auto-generated method stub

    }

    public void init() {

    }

    public void Destroy() {

    }
    public void defautInit() {

    }

    public void defaultDestroy() {

    }

}

首先梳理一下:

  • 第一种方式:在bean中声明 init-method 和/或 destroy-method 参数
  • 第二种方式:实现InitializingBean和DisposableBean 接口
  • 第三种方式:在beans中声明default-init-method和/或 default-destroy-method 参数

只要使用了第一种和第二种中的任何一个,第三种方式就不会执行了,也就是说第一种和第二种方式会覆盖第一种;而第一种和第二种方式相比第二种的优先级更高,而就是说第二种方式会优先于第一种方式执行。

还有一点需要注意:如果你在在beans中声明default-init-method和/或 default-destroy-method 参数 ,但是没有在类里面实现这两个方法,那也是可以的,程序运行时不会报错。

发布了65 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/shanshui911587154/article/details/78868498