在您的应用程序中,由 Spring IoC 容器治理的造成其外围的对象被称为 ”bean”。一个 bean 是由 Spring IoC 容器实例化、组装和治理的对象。这些 bean 是通过您提供给容器的配置元数据创立的,例如,在后面章节中曾经看到的 XML <bean/>
定义。
Bean 定义蕴含了所谓的配置元数据,容器须要理解以下内容:
- 如何创立一个 bean
- Bean 的生命周期详细信息
- Bean 的依赖关系
上述所有的配置元数据都转化为每个 bean 定义的以下属性汇合。
序号 | 属性和形容 |
---|---|
1 | class |
这是必填属性,指定要用于创立 bean 的 bean 类。 | |
2 | name |
此属性惟一地指定 bean 标识符。在基于 XML 的配置元数据中,您能够应用 id 和 / 或 name 属性来指定 bean 标识符。 | |
3 | scope |
此属性指定从特定 bean 定义创立的对象的范畴,将在 bean 范畴章节中探讨。 | |
4 | constructor-arg |
这用于注入依赖项,将在后续章节中探讨。 | |
5 | properties |
这用于注入依赖项,将在后续章节中探讨。 | |
6 | autowiring mode |
这用于注入依赖项,将在后续章节中探讨。 | |
7 | lazy-initialization mode |
提早初始化的 bean 通知 IoC 容器在首次申请时创立 bean 实例,而不是在启动时创立。 | |
8 | initialization method |
在容器设置了 bean 的所有必须属性之后,要调用的回调函数。将在 bean 生命周期章节中探讨。 | |
9 | destruction method |
在蕴含 bean 的容器销毁时要应用的回调函数。将在 bean 生命周期章节中探讨。 |
Spring 配置元数据
Spring IoC 容器与理论编写配置元数据的格局齐全解耦。以下是向 Spring 容器提供配置元数据的三种重要办法:
- 基于 XML 的配置文件。
- 基于注解的配置。
- 基于 Java 的配置。
您曾经看到了如何将基于 XML 的配置元数据提供给容器,但让咱们看一下蕴含不同 bean 定义的 XML 配置文件的另一个示例,包含提早初始化、初始化办法和销毁办法。
<?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">
<!-- 一个简略的 bean 定义 -->
<bean id = "..." class = "...">
<!-- 此处是该 bean 的协作者和配置 -->
</bean>
<!-- 启用提早初始化的 bean 定义 -->
<bean id = "..." class = "..." lazy-init = "true">
<!-- 此处是该 bean 的协作者和配置 -->
</bean>
<!-- 具备初始化办法的 bean 定义 -->
<bean id = "..." class = "..." init-method = "...">
<!-- 此处是该 bean 的协作者和配置 -->
</bean>
<!-- 具备销毁办法的 bean 定义 -->
<bean id = "..." class = "..." destroy-method = "...">
<!-- 此处是该 bean 的协作者和配置 -->
</bean>
<!-- 更多的 bean 定义在此处 -->
Spring 中的 Bean 作用域
在定义 <bean>
时,您能够抉择为该 bean 申明一个作用域。例如,要强制 Spring 每次须要时生成新的 bean 实例,您应该将 bean 的作用域属性申明为 prototype。相似地,如果您心愿 Spring 每次须要时返回雷同的 bean 实例,您应该将 bean 的作用域属性申明为 singleton。
Spring Framework 反对以下五种作用域,其中三种仅在应用与 Web 相干的 ApplicationContext 时才可用。
序号 | 作用域 & 形容 |
---|---|
1 | singleton |
将 bean 定义的作用域限度为 Spring IoC 容器中的单个实例(默认)。 | |
2 | prototype |
将单个 bean 定义的作用域限度为具备任意数量的对象实例。 | |
3 | request |
将 bean 定义的作用域限度为 HTTP 申请。仅在具备与 Web 相干的 Spring ApplicationContext 的状况下无效。 | |
4 | session |
将 bean 定义的作用域限度为 HTTP 会话。仅在具备与 Web 相干的 Spring ApplicationContext 的状况下无效。 | |
5 | global-session |
将 bean 定义的作用域限度为全局 HTTP 会话。仅在具备与 Web 相干的 Spring ApplicationContext 的状况下无效。 |
在本章中,咱们将探讨前两种作用域,当探讨与 Web 相干的 Spring ApplicationContext 时,将探讨其余三种作用域。
单例作用域(singleton)
如果将作用域设置为 singleton,Spring IoC 容器将创立一个对象的确切实例,该实例由 bean 定义定义。此单个实例存储在此类单例 bean 的缓存中,对于该命名 bean 的所有后续申请和援用都会返回缓存的对象。
默认作用域始终是 singleton。然而,当您须要一个且仅一个 bean 实例时,您能够在 bean 配置文件中将作用域属性设置为 singleton,如下所示:
<!-- 具备 singleton 作用域的 bean 定义 -->
<bean id="..." class="..." scope="singleton">
<!-- 此处搁置此 bean 的协作者和配置 -->
示例
假如您曾经筹备好 Eclipse IDE,并采取以下步骤创立 Spring 应用程序:
步骤 形容 1 创立一个名为 SpringExample 的我的项目,在创立的我的项目中的 src 文件夹下创立一个名为 com.tutorialspoint 的包。2 应用 ”Add External JARs” 选项增加所需的 Spring 库,如 Spring Hello World 示例章节中所述。3 在 com.tutorialspoint 包下创立 Java 类 HelloWorld 和 MainApp。4 在 src 文件夹下创立 Beans 配置文件 Beans.xml。5 最初一步是创立所有 Java 文件和 Bean 配置文件的内容,并按以下阐明运行应用程序。
以下是 HelloWorld.java 文件的内容:
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){this.message = message;}
public void getMessage(){System.out.println("Your Message :" + message);
}
}
以下是 MainApp.java 文件的内容:
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
objA.setMessage("I'm object A");
objA.getMessage();
HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
objB.getMessage();}
}
以下是 singleton 作用域所需的 Beans.xml 配置文件的内容:
<?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">
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld" scope="singleton">
</bean>
</beans>
当您实现创立源代码和 bean 配置文件后,让咱们运行应用程序。如果您的应用程序一切正常,它将打印以下音讯:
Your Message : I'm object A
Your Message : I'm object A
原型作用域(prototype)
如果将作用域设置为 prototype,Spring IoC 容器将在每次申请特定 bean 时创立该对象的新 bean 实例。通常,对于所有有状态的 bean,应用 prototype 作用域,对于无状态的 bean,应用 singleton 作用域。
要定义原型作用域,您能够在 bean 配置文件中将作用域属性设置为 prototype,如下所示:
<!-- 具备 prototype 作用域的 bean 定义 -->
<bean id="..." class="..." scope="prototype">
<!-- 此处搁置此 bean 的协作者和配置 -->
</bean>
示例
假如您曾经筹备好 Eclipse IDE,并采取以下步骤创立 Spring 应用程序:
步骤 形容 1 创立一个名为 SpringExample 的我的项目,在创立的我的项目中的 src 文件夹下创立一个名为 com.tutorialspoint 的包。2 应用 ”Add External JARs” 选项增加所需的 Spring 库,如 Spring Hello World 示例章节中所述。3 在 com.tutorialspoint 包下创立 Java 类 HelloWorld 和 MainApp。4 在 src 文件夹下创立 Beans 配置文件 Beans.xml。5 最初一步是创立所有 Java 文件和 Bean 配置文件的内容,并按以下阐明运行应用程序。
以下是 HelloWorld.java 文件的内容:
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){this.message = message;}
public void getMessage(){System.out.println("Your Message :" + message);
}
}
以下是 MainApp.java 文件的内容
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
objA.setMessage("I'm object A");
objA.getMessage();
HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
objB.getMessage();}
}
以下是 prototype 作用域所需的 Beans.xml 配置文件的内容:
<?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">
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld" scope="prototype">
</bean>
</beans>
当您实现创立源代码和 bean 配置文件后,让咱们运行应用程序。如果您的应用程序一切正常,它将打印以下音讯:
Your Message : I'm object A
Your Message : null
最初
为了不便其余设施和平台的小伙伴观看往期文章,链接奉上:
公众号搜寻 Let us Coding
, 知乎 , 开源中国 ,CSDN, 思否 , 掘金 ,InfoQ, 简书 , 博客园 , 慕课 ,51CTO,helloworld, 腾讯开发者社区 , 阿里开发者社区
看完如果感觉有帮忙,欢送 点赞、珍藏 和关注