Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期

一、Spring Bean 作用域

当我们在 Spring 中定义了一个 Bean 之后,必须给我们的 Bean 定义一个作用域。

当然啊,我们之前弄得内个 HelloWorld 的时候,貌似并没有给这个 Spring 定义作用域。其实不然,Spring 其实默认给与了 Bean 一个作用域,就是:singleton。

这时候有人会问了,这个作用域有啥用?

这里我们需要知道一下 Spring 的作用域有那些,分别代表的是什么意思。

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第1张图片

Spring 一共有五种作用域,每个作用域有不同的功能,默认的 singleton 可以说就是全局唯一,Bean 以单例的方式存在。

如果我们需要每次都从容器中从新生成一个 Bean,那么我们就需要给这个 Bean 的作用域配置成 prototype。

这里我还要说一句,我们常用的一般只有这两个,其他的了解即可~~~

接下来我们来使用一下,感受感受这两个作用域。

1. singleton

我们创建一个 Singleton 的类,并在类中定义一个 msg 的属性,顺便写上 get、set 方法。

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第2张图片

然后我们再配置一下 beans.xml 这个文件。

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第3张图片

当然啊,这个 scope 我们可以写可以不写,不写的话,Spring 会帮我们默认成 singleton,我们为了学习,就先写上。

接着写一个测试类。

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第4张图片

很简单的一个测试类啊,我们就看看最后两个 Bean 能不能都输出 aaa 这个东西。运行一下~

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第5张图片

是 ok 的啊。

2. prototype

这个 prototype 作用域是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。

我们其实还是使用上面的那个例子,然后,我们只需要修改一下作用域,然后直接测试即可,其他的不需要动。

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第6张图片

接着来测试

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第7张图片

是不是啊,我们就获取不到 null 了。

二、Spring Bean 的生命周期

其实 Bean 的生命周期和这个 Servlet 很类似。

Bean的生命周期可以表达为:Bean的定义——Bean的初始化——Bean的使用——Bean的销毁

当然啊,有一些在 Bean 实例化和销毁之间发生的活动,但是本章将只讨论两个重要的生命周期回调方法,它们在 bean 的初始化和销毁的时候是必需的。

初始化回调

初始化回调可以通过实现接口或者是通过配置进行回调,我们来介绍一下这两种方法。

1. 接口回调

接口回调,需要我们实现 InitializingBean 这个接口,下面我们创建一个 Bean,然后实现这个接口。

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第8张图片

自己配置一下 Bean,然后我们来测试一下这个方法

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第9张图片

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第10张图片

可以看到,我们是先执行回调之后,然后才去执行 say 方法。

2. 配置回调

配置回调我们可以不去实现接口,通过在 bean.xml 配置来实现回调

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第11张图片

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第12张图片

然后再来运行测试方法。

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第13张图片

是没有问题的。

销毁回调

同样啊,销毁回调也有两种方法,实现接口或者配置

1. 实现接口

销毁的回调接口是 DisposableBean

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第14张图片

其他的不变,我们这次修改一下测试代码,我们添加一个方法调用

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第15张图片

这里还需要注意的是,我们需要将之前的 ApplicationContext 修改成 AbstractApplicationContext。

然后我们测试

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第16张图片

也是没有问题的啊。

2. 配置实现

同样需要配置到 bean.xml 中,属性是 destroy-method。

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第17张图片

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第18张图片

再来测试一下

Spring & Spring MVC 3. Spring Bean 作用域 & 生命周期_第19张图片

 

好了,这一篇就先到这里,先看着,慢慢消化。

各位,还有一件事,我的官网要准备从新制作,有没有什么好的提议,用什么框架,有什么功能,欢迎各位小伙伴提供~~~(直接评论在评论区即可,我到时候会整理起来)

你可能感兴趣的:(Spring,&,Spring,MVC,spring,java,spring,boot,bean,ioc)