Spring系列教程四:Spring对Bean的管理细节

1、Spring建立bean的三种方式

①使用默认构造函数建立web

在spring配置文件中使用bean标签,配以id和class属性后,且没有其余属性和标签时。采用的就是默认构造函数建立bean对象,此时若是类中没有默认构造函数,则对象没法建立,示例子以下spring

在accountServiceImpl结构中原本是有一个默认构造函数,如今咱们在默认构造函数里面传了几个参数进去,再也不从新建立默认构造函数,如今咱们来点击运行一下,结果以下,显示建立实例对象失败,没有找到默认构造函数,与此同时咱们的配置文件也在报错服务器

②使用普通工厂中的方法建立对象(使用某个类中的方法建立对象,而且存入spring容器)session

首先咱们先建立一个工厂类,经过工厂类最终来获得一个AccountService对象负载均衡

那么咱们bean配置文件中修改的代码以下,根据上面注释掉的代码得知,咱们是要经过惟一的id标示符得到一个新的对象,可是这样写的话,这样建立出来的是咱们的须要的那个accountServie对象嘛,实际上咱们获得的是一个工厂对象,咱们要的是工厂对象里面return出来的那个对象函数

正确的写法是上面的第二张图,咱们是要经过工厂对象建立accountService对象,那好,第一行是建立是工厂对象,咱们是须要用它里面的方法建立咱们须要的accountSerivce对象,那么地二行咱们就须要定义一个accountService对象,那么这个对象是怎么来的啦?是factory-bean这个id,里面指定的factory-method这个方法return出来的网站

③使用普通工厂中的静态方法建立对象(使用某个类中的静态方法建立对象,而且存入spring容器)spa

先建立一个静态的工厂类的方法prototype

在配置文件中作出的改动,这样写的话就是咱们须要建立出来的那个对象嘛??只是建立的一个Staticfactory对象,那怎么才能取到咱们须要的accountService对象啦??这个时候就须要在后面加factory-method,直接调用静态方法,执行结果如第三张图对象

2、bean对象的做用范围

在工厂模式中解耦的时候,咱们都知道bean是个单例对象,那么咱们强大的Spring对象是否是也知道bean是个单例对象啦??下面咱们在容器中取两个对象,那么这个两个对象是否是同iyge对象啦!!

构造函数只运行了一次,spirng 中的bean对象默认单例对象,那么怎么去调整这个bean对象做用范围?那就不得不用scope属性

scope属性主要包括

singleton(单例,默认值)

prototype(多例)

request(做用于web应用的请求范围)

session(做用于web应用的会话范围)

golbal-session(做用于集群环境会话范围,也称为全局范围,当不是集群环境时候就是session)

 

当咱们把做用范围改为prototype的时候,这个时候对象被建立了两次不是同一个对象

有一个疑问?什么是golbal-session??好的各位大佬,下面给你们解释一下

咱们在访问网站服务器的时候,要是访问的人数比较多的话,一台是不够的,并且这个时候就经过负载均衡来决定你的访问是用那一台空闲的服务器

这个时候你确定是要登录的,那么你的我的密码等信息若是是保持的第一台服务器session上的,那么下一次你在访问的时候,负载均衡会随机给你再分配一台空闲的服务器

那么这个时候必然会存在验证,实际状况中这种状况都是咱们不但愿碰见的,这个时候golbal session就起做用了,它把全部的session做为一个总体的session

3、bean对象的生命周期

bean分为两种对象,一个是单例对象,一个是多例对象

如今咱们先试一下单例对象

手动关闭以下,可是这个又是怎么回事?

显示结果以下,可是没有显示容器被习销毁了,这是怎么回事??main方法是一切程序的入口,还没来的及调用这个方法,都已经结束啦,这个时候须要咱们手动关闭

主要是你用的是父借口去调用了子类特有的方法,固然是不能实现的,要换成子类,图下显示对象被销毁

相关文章
相关标签/搜索