Spring系列教程四:Spring对Bean的管理细节
2019独角兽企业重金招聘Python工程师标准>>>
一、Spring创建bean的三种方式
①使用默认构造函数创建
在spring配置文件中使用bean标签,配以id和class属性后,且没有其他属性和标签时。采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建,示例子如下
在accountServiceImpl结构中本来是有一个默认构造函数,现在我们在默认构造函数里面传了几个参数进去,不再重新创建默认构造函数,现在我们来点击运行一下,结果如下,显示创建实例对象失败,没有找到默认构造函数,与此同时我们的配置文件也在报错
②使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并且存入spring容器)
首先我们先创建一个工厂类,通过工厂类最终来得到一个AccountService对象
那么我们bean配置文件中修改的代码如下,根据上面注释掉的代码得知,我们是要通过唯一的id标示符获得一个新的对象,但是这样写的话,这样创建出来的是我们的需要的那个accountServie对象嘛,实际上我们得到的是一个工厂对象,我们要的是工厂对象里面return出来的那个对象
正确的写法是上面的第二张图,我们是要通过工厂对象创建accountService对象,那好,第一行是创建是工厂对象,我们是需要用它里面的方法创建我们需要的accountSerivce对象,那么地二行我们就需要定义一个accountService对象,那么这个对象是怎么来的啦?是factory-bean这个id,里面指定的factory-method这个方法return出来的
③使用普通工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并且存入spring容器)
先创建一个静态的工厂类的方法
在配置文件中做出的改动,这样写的话就是我们需要创建出来的那个对象嘛??只是创建的一个Staticfactory对象,那怎么才能取到我们需要的accountService对象啦??这个时候就需要在后面加factory-method,直接调用静态方法,执行结果如第三张图
二、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
三、bean对象的生命周期
bean分为两种对象,一个是单例对象,一个是多例对象
现在我们先试一下单例对象
手动关闭如下,但是这个又是怎么回事?
显示结果如下,但是没有显示容器被习销毁了,这是怎么回事??main方法是一切程序的入口,还没来的及调用这个方法,都已经结束啦,这个时候需要我们手动关闭
主要是你用的是父借口去调用了子类特有的方法,当然是不能实现的,要换成子类,图下显示对象被销毁
转载于:https://my.oschina.net/u/4115727/blog/3049956
Spring系列教程四:Spring对Bean的管理细节相关推荐
- 爆破专栏丨Spring系列教程解决Spring Security环境中的跨域问题
上一章节中,一一哥 给各位讲解了同源策略和跨域问题,以及跨域问题的解决方案,在本篇文章中,我会带大家进行代码实现,看看在Spring Security环境中如何解决跨域问题. 一. 启用Spring ...
- git上传分支的原理_git系列教程四:分支和分支管理
一些零碎的知识 修改最后一次提交 实际开发中,你可能会遇到下边这两种情况: Situation One:版本刚一提交(commit)到仓库,突然想起漏掉两个文件还没有添加(add).就好比你是老司机, ...
- docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器
不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...
- freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...
- 最新 Spring 系列教程,都在这了
转载自 最新 Spring 系列教程,都在这了 Spring Boot 系列 什么是 Spring Boot? 公司不用 Spring Boot,果断离职了! 告诉你,Spring Boot 真是个 ...
- 史上最详细的Android Studio系列教程四--Gradle基础
史上最详细的Android Studio系列教程四--Gradle基础 转载于:https://www.cnblogs.com/zhujiabin/p/5125917.html
- Spring系列教程八: Spring实现事务的两种方式
2019独角兽企业重金招聘Python工程师标准>>> 一. Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的 ...
- Spring系列(四):@Scope注解用法介绍
今天给大家分享Spring中@Scope注解的用法,希望对大家能有所帮助! @Scope 定义以及作用 @Scope注解主要作用是调节Ioc容器中的作用域,在Spring IoC容器中主要有以下五种作 ...
- Spring系列(二):Bean注解用法介绍
今天给大家介绍一下Spring中Bean注解的用法,后续的文章给大家介绍Sping其他注解用法,希望对大家日常工作能有所帮助! 1.首先创建一个maven项目引入spring依赖 <depend ...
最新文章
- yii2数组转为对象_好程序员Java学习路线分享java为什么不支持泛型数组
- oracle安装中桌面模式与服务器模式的去别
- spring 的singleton 和prototype的区别和应用场合
- [转载] Python format()格式:中文对齐问题
- 中望CAD的引线标注格式怎么改_大神总结的CAD设计五个段位 快来看看你在哪个阶段...
- matlab菲涅尔衍射,基于matlab的菲涅尔衍射仿真
- 电驴链接服务器老是无响应,电驴emule eD2k 不能连接服务器解决办法
- 非常有用的制作logo的网站
- 华为确定发布鸿蒙的时间了吗,Mate40系列首发,华为鸿蒙OS手机版发布时间确定...
- 十大排序算法代码集锦(java)
- direct show
- [CIKM 2019]Balance in Signed Bipartite Networks
- Python黑马头条推荐系统第五天 头条排序模型进阶-神经网络
- Win10 忘记开机密码的解决办法(亲测可用)
- UEFI和Legacy的区别与系统支持 (图文详解)
- 原典法的学习训练程序详细介绍
- java 线程起名字_java多线程学习三::::为什么要给线程起名字并且知道守护作用?...
- 电脑开机后显示服务器没有声音,电脑没有声音了是怎么回事 如何处理电脑没有声音的问题...
- 这是一趟豪华的 Android 列车,就问你上不上?
- ZZULIOJ1037