Spring中Bean的概念

一、Bean的定义

<beans…/>元素是Spring配置文件的根元素,<beans…/>元素可以包含多个<bean…/>子元素,每个<bean…/>元素可以定义一个Bean实例,每一个Bean对应Spring容器里的一个Java实例定义Bean时通常需要指定两个属性。

Id:确定该Bean的唯一标识符,容器对Bean管理、访问、以及该Bean的依赖关系,都通过该属性完成。Bean的id属性在Spring容器中是唯一的。

Class:指定该Bean的具体实现类。注意这里不能使接口。通常情况下,Spring会直接使用new关键字创建该Bean的实例,因此,这里必须提供Bean实现类的类名。

Spring容器集中管理Bean的实例化,Bean实例可以通过BeanFactory的getBean(String beanid)方法得到。BeanFactory是一个工厂,程序只需要获取BeanFactory引用,即可获得Spring容器管理全部实例的引用。程序不需要与具体实例的实现过程耦合。大部分Java EE应用里,应用在启动时,会自动创建Spring容器,组件之间直接以依赖注入的方式耦合,甚至无须主动访问Spring容器本身。

当我们在配置文件中通过方法配置一个Bean时,这样就需要该Bean实现类中必须有一个无参构造器。

二、容器中Bean的作用域

当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。

Spring支持5种作用域:

Singleton:单例模式。在整个SpringIoC容器中,使用singleton定义的Bean将只有一个实例,这是默认的配置。
Prototype:原型模式。每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例。
request:对于每次HTTP请求,使用request定义的Bean都将产生一个新的实例,即每次HTTP请求都会产生不同的Bean实例。当然只有在WEB应用中使用Spring时,该作用域才真正有效。
session:对于每次HTTPSession,使用session定义的Bean都将产生一个新的实例时,即每次HTTP Session都将产生不同的Bean实例。同HTTP一样,只有在WEB应用才会有效。
global session:每个全局的HTTPSession对应一个Bean实例。仅在portlet Context的时候才有效。
比较常用的singleton和prototype。如果一个Bean实例被设置为singleton,那么每次请求该Bean时都会获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为。如果一个Bean实例被设置为prototype,那么每次请求该di的Bean,Spring都会创建一个新的Bean实例返回给程序,在这种情况下,Spring容器仅仅使用new关键字创建Bean实例,一旦创建成功,容器将不会再跟踪实例,也不会维护Bean实例的状态。
如果我们不指定Bean的作用域,则Spring会默认使用singleton作用域。设置Bean的作用域是通过scope属性来指定。可以接受Singleton、prototype、request、session、global session 5个值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[TJOI2010]阅读理解

题目描述 英语老师留了N篇阅读理解作业&#xff0c;但是每篇英文短文都有很多生词需要查字典&#xff0c;为了节约时间&#xff0c;现在要做个统计&#xff0c;算一算某些生词都在哪几篇短文中出现过。 输入输出格式 输入格式&#xff1a; 第一行为整数N&#xff0c;表示短文篇…

ccentos 7下安装php5.6并使用nginx + php-fpm部署多个不同端口网站

作为一个的勤杂工&#xff0c;近期因公司内部信息化的需求&#xff0c;给新进员工提供基础的知识培训和介绍&#xff0c;也为了给公司内部建立一个沟通交流的平台&#xff0c;百度找了开源的百科系统HDwiki和开源的问答系统Tipask问答系统&#xff0c;蛋痛的这两套系统均是phpm…

Zookeeper基础使用机制原理

Znode&#xff1a; 1、Znode既是路径(目录)也是信息(文件) 2、Znode有两种分类&#xff1a;一分为临时节点(会话生命周期)和永久节点&#xff1b;二分为普通节点和顺序节点 Watch&#xff1a; 1、监听与通知机制&#xff0c;可以在节点上监听其本身(增、删、改)或其子节点(增、…

JS ajax请求参数格式( formData 、serialize)

1 $("#importBtn").click(function(){2 if($("#conId").val() ""){3 alert("请填写Id");4 return;5 }6 if($("#fromWhere").val() "…

【小工具分享】 - vscode注释自动生成

参考 关闭文件头部注释 点击设置 输入fileheader搜索 关闭头部注释 "fileheader.customMade" : {"autoAdd": false }

Spring的bean实例化过程

以XmlBeanFactory为例&#xff0c;最简单的取bean方式是&#xff1a; BeanFactory factory new XmlBeanFactory(new FileSystemResource("D:\\workspace\\JavaApplication2\\src\\javaapplication2\\spring\\beans.xml")); Car obj (Car)factory.getBean("c…

最全整理浏览器兼容性问题与解决方案(转)

所谓的浏览器兼容性问题&#xff0c;是指因为不同的浏览器对同一段代码有不同的解析&#xff0c;造成页面显示效果不统一的情况。在大多数情况下&#xff0c;我们的需求是&#xff0c;无论用户用什么浏览器来查看我们的网站或者登陆我们的系统&#xff0c;都应该是统一的显示效…

【算法】 - 滑动窗口

1. 题目链接 2. 分析 最多可以将K个值从0变成1,因此滑动窗口的限制条件: 0的数量(zeros)小于K,算法过程如下 有一个滑动窗口(slipper),每次都会从A中读入一个数当读入的数为0时,zeros当zeros的数量大于K时,会取出slipper首部的元素,当取值为0时zeros-- 总体代码如下: var lo…

Springboot整合thymeleaf模板

Thymeleaf是个XML/XHTML/HTML5模板引擎&#xff0c;可以用于Web与非Web应用。 Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式&#xff0c;因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码&#xff0…

Java代码输出到txt文件(申请专利贴源码的必备利器)

最近公司在申请专利&#xff0c;编写不少文档&#xff0c;项目的代码量实在是过于庞大。如果一个一个的复制粘贴虽然能够完成&#xff0c;但是对于程序员而言实在没有这个必要。shell或者python就能解决这个问题。由于我个人对于shell和python不是非常熟练的情况下&#xff0c;…

【算法】 - 动态规划 + 位运算

题目描述 思路1: 写一个返回2进制中1数量的函数countOne遍历0到num,对每一个数使用countOne,并将结果保存到res中返回 var countBits function (num) {let res new Array(num 1).fill(0);for (let i 0; i < num; i) {res[i] countOne(i.toString(2));}return res; };…

Spring配置AOP切入点execution详解

例&#xff1a; execution (* com.sample.service…*. *(…)) 整个表达式可以分为五个部分&#xff1a; 1、execution():&#xff1a;表达式主体。 2、第一个*号&#xff1a;表示返回类型&#xff0c; *号表示所有的类型。 3、包名&#xff1a;表示需要拦截的包名&#xff…

Netty

1BS/CS? 2断点续传需要activeX,需要独立客户端有状态,tomcat无状态,或者Netty有状态,可以断点续传 3Netty核心java nio性能比较高 4Jetty和Netty和dubbo区别? 5 转载于:https://www.cnblogs.com/xinglongbing521/p/10105351.html

sympy科学计算器

SymPy库常用函数 简介 本文抄于https://www.cnblogs.com/baby123/p/6296629.html SymPy是一个符号计算的Python库。它的目标是成为一个全功能的计算机代数系统&#xff0c;同时保持代码简 洁、易于理解和扩展。它完全由Python写成&#xff0c;不依赖于外部库。SymPy支持符号计算…

【异或运算】 - 交换2个数

1. 代码 let a 3; let b 4; a a ^ b; b a ^ b; a a ^ b;2. 异或的性质 不同为1,相同为0(可以看做是无进制位的加法)交换律: a ^ b b ^ a;结合律: (a ^ b) ^ c a ^ (b ^ a);0 ^ x x;x ^ x 0; 3. 证明 下面证明1中的代码 a 3 ^ 4;b (3 ^ 4) ^ 4 3 ^ 0 3;a (3…

Spring底层控制反转解耦合(IOC)

简单的例子解释IOC控制反转进行解耦合 一、相关概念 &#xff08;1&#xff09;解耦合 解耦合就是把程序中互相不相关或有限相关的模块分割开来&#xff0c;把不同模块互相之间的关系用接口进行准确定义&#xff0c;解耦前&#xff0c;两个模块之间共享所有信息&#xff1b; &…

Manacher算法学习笔记 | LeetCode#5

Manacher算法学习笔记 DECLARATION 引用来源&#xff1a;https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途&#xff1a;寻找一个字符串的最长回文子串时间复杂度&#xff1a;O(N)算法步骤&#xff1a; 1.添加特殊字符 由于回文串的长度可奇可偶&#xff0c;比如…

content-type对照表

转载于:https://www.cnblogs.com/mxyr/p/9238329.html

【算法小积累】 - 提取非0数最右侧的1

参考 - 69:49 const getRightOne num > {return num & (~num 1); };