Spring Bean的定义及作用域 了解Spring的基本概念 Spring简单的示例

本文内容纲要:

- Bean的定义

- Bean的作用域

目录:

  1. 了解Spring的基本概念
  2. Spring简单的示例

Bean的定义

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

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

其中有如下代码:

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

本文内容总结:Bean的定义,Bean的作用域,

原文链接:https://www.cnblogs.com/lbhym/p/11898253.html

以上是 Spring Bean的定义及作用域 了解Spring的基本概念 Spring简单的示例 的全部内容, 来源链接: utcz.com/z/362347.html

回到顶部