Spring精华问答 | 什么是Spring inner beans?

640?wx_fmt=png

Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持。今天就让我们来看看关于Spring的精华问答吧。


640?wx_fmt=gif1

Q:请解释Spring Bean的生命周期?


A:Spring Bean的生命周期简单易懂。在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。

Spring bean factory 负责管理在spring容器中被创建的bean的生命周期。Bean的生命周期由两组回调(call back)方法组成。

初始化之后调用的回调方法。

销毁之前调用的回调方法。

Spring框架提供了以下四种方式来管理bean的生命周期事件:

  • InitializingBean和DisposableBean回调接口

  • 针对特殊行为的其他Aware接口

  • Bean配置文件中的Custom init()方法和destroy()方法

  • @PostConstruct和@PreDestroy注解方式

使用customInit()和 customDestroy()方法管理bean生命周期的代码样例如下:640?wx_fmt=png


640?wx_fmt=gif2

Q:Spring Bean的作用域之间有什么区别?


A:Spring容器中的bean可以分为5个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下:

singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。

request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。


640?wx_fmt=gif3

Q:什么是Spring inner beans?


A:在Spring框架中,无论何时bean被使用时,当仅被调用了一个属性。一个明智的做法是将这个bean声明为内部bean。内部bean可以用setter注入“属性”和构造方法注入“构造参数”的方式来实现。比如,在我们的应用程序中,一个Customer类引用了一个Person类,我们的要做的是创建一个Person的实例,然后在Customer内部使用。640?wx_fmt=png

内部bean的声明方式如下:640?wx_fmt=png


640?wx_fmt=gif4

Q:Spring框架中的单例Beans是线程安全的么?


A:Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”。


640?wx_fmt=gif5

Q:请举例说明如何在Spring中注入一个Java Collection?


A:Spring提供了以下四种集合类的配置元素:

  • <list> :   该标签用来装配可重复的list值。

  • <set> :    该标签用来装配没有重复的set值。

  • <map>:   该标签可用来注入键和值可以为任何类型的键值对。

  • <props> : 该标签支持注入键和值都是字符串类型的键值对。

下面看一下具体的例子:640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png


640?wx_fmt=png

小伙伴们冲鸭,后台留言区等着你!

关于Spring,今天你学到了什么?还有哪些不懂的?除此还对哪些话题感兴趣?快来留言区打卡啦!留言方式:打开第XX天,答:……

同时欢迎大家搜集更多问题,投稿给我们!风里雨里留言区里等你~


福利

1、扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg

2、公众号后台回复:白皮书,获取IDC最新数据白皮书整理资料!


推荐阅读:


640?wx_fmt=png 真香,朕在看了!

猜你喜欢

转载自blog.csdn.net/FL63Zv9Zou86950w/article/details/89391961