Spring Bean的定义及作用域
时间:2019-11-20
本文章向大家介绍Spring Bean的定义及作用域,主要包括Spring Bean的定义及作用域使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录:
Bean的定义
简单地说Bean是被Spring容器管理的Java对象,Spring容器会自动完成对Bean的实例化。
其中有如下代码:
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
context就是一个容器,当然这不是官方最准确的定义,不过初步学习,我们知道这个实例化对象就是个容器就行了。
第二篇随笔中,配置文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- id自己命名,class就是需要注入属性的类--> <bean id="c" class="Category"> <!-- name就是属性的名称,value就是注入到该属性的值--> <property name="name" value="Hello Word"/> </bean> </beans>
bean定义时的属性列表如下(摘自w3cschool):
属性 | 描述 |
---|---|
class | 这个属性是强制性的,并且指定用来创建 bean 的 bean 类。 |
name | 这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。 |
scope | 这个属性指定由特定的 bean 定义创建的对象的作用域,它将会在 bean 作用域的章节中进行讨论。 |
constructor-arg | 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。 |
properties | 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。 |
autowiring mode | 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。 |
lazy-initialization mode | 延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。 |
initialization 方法 | 在 bean 的所有必需的属性被容器设置之后,调用回调方法。它将会在 bean 的生命周期章节中进行讨论。 |
destruction 方法 | 当包含该 bean 的容器被销毁时,使用回调方法。它将会在 bean 的生命周期章节中进行讨论。 |
Bean的作用域
上面表格中,scope属性就是用来指定作用域的。其值及描述如下:
作用域 | 描述 |
---|---|
singleton |
在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认值 |
prototype | 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean() |
request | 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境 |
session | 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境 |
global-session | 一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境 |
下面我们就来写两个常用的作用域。
首先准备一个类,这个类不用变
public class Category { //属性 private String name; //设置该属性的方法 public void setName(String name){ this.name=name; } //获取该属性的方法 public void getName(){ System.out.println(name); } }
singleton作用域:
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- id自己命名,class就是需要注入属性的类--> <bean id="c" class="Category" scope="singleton"> </bean> </beans>
测试类
public class TestSpring { public static void main(String[] args) { //Spring的API ApplicationContext。applicationContext.xml就是自己创建的配置文件 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); //c就是后面配置文件的id Category category=(Category)context.getBean("c"); //不在配置文件中设置,用set方法设置属性的值 category.setName("第一次设置"); category.getName(); //第二个对象 Category category1=(Category)context.getBean("c"); //不用设置,直接获取属性的值 category1.getName(); } }
最后的结果是:
第一次设置
第一次设置
两次输出相同的内容,说明id为c的bean只有1个,两次返回的都是同一个值。
prototype作用域:
配置文件中的scope改成prototype。其他所有代码不变,包括测试类
最后输出:
第一次设置
null
说明容器每次调用getBean时返回的是一个新的实例,所以第一次设置对第二个对象无效。
原文地址:https://www.cnblogs.com/lbhym/p/11898253.html
- 每天一个Linux命令:chmod
- SparkSql 中外连接查询中的谓词下推规则
- Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>
- Python进行数据可视化分析快速教程实例
- 一个抓取豆瓣图书的开源爬虫的详细步骤
- Java 8 Stream 教程 (三)
- silverlight ListBox 多列图片效果
- ZooKeeper构建分布式锁(选译)
- Caliburn.Micro学习笔记(二)----Actions
- 每天一个Linux命令:find
- textFile构建RDD的分区及compute计算策略
- 一个基于Flask和MongoDB的CMS内容管理系统
- c++多重继承小结
- 初识PB级数据分析利器Prestodb
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- shell脚本快速入门系列之------条件语句(if、case)
- 搞它!!!2020年了你还不会Cobbler自动装机么(装机步骤,优化内容详解,导入系统镜像步骤,cobbler-web管理认证方式
- 搞它!!!深入了解FTP文件传输服务
- 搞它!!!CentOS 7.6 安装和配置samba文件共享服务
- shell脚本快速入门系列之------变量
- 弄它!!! 深入了解STP生成树协议
- kali linux下的常用bash命令
- shell脚本快速入门之-----linux设置 自定义脚本开机启动,一键式部署网卡配置文件
- jdbc连接oracle语法
- java实现数据库连接的工具类
- shell脚本快速入门之-----正则三剑客之一grep用法大全!!!
- 【网页特效】11 个文本输入和 6 个按钮操作 特效库
- shell脚本快速入门之-----正则三剑客之二sed用法大全!!!
- JSP中的Cookie
- 傅里叶变换