spring定义及作用域

目录:

了解Spring的基本概念

Spring简单的示例

Bean的定义
简单地说Bean是被Spring容器管理的Java对象,Spring容器会自动完成对Bean的实例化。

那么什么是容器呢?如果看过上篇简单的Spring示例。

其中有如下代码:

ApplicationContext context=new ClassPathXmlApplicationContext(“applicationContext.xml”);
context就是一个容器,当然这不是官方最准确的定义,不过初步学习,我们知道这个实例化对象就是个容器就行了。

第二篇随笔中,配置文件内容如下:

复制代码

<?xml version="1.0" encoding="UTF-8"?>

<bean id="c" class="Category">
    <property name="name" value="Hello Word"/>
</bean>
复制代码 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"?>

<bean id="c" class="Category" scope="singleton">
复制代码 测试类

复制代码
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时返回的是一个新的实例,所以第一次设置对第二个对象无效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值