Spring学习笔记之配置Bean
自建博客地址:https://www.bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客👇
本文作者: Jeffrey
本文链接: https://www.bytelife.net/articles/27638.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
一、在Spring的IOC容器中配置Bean
可以通过Spring的XML配置文件来配置Bean,例如:
<!-- 配置Bean -->
<bean id="helloWorld" class="cn.javacodes.spring.beans.HelloWorld"></bean>
其中:
- id属性定义了Bean的名字,也作为该Bean在Spring容器中的引用;
- class属性定义了该Bean的类型
注意:
- id属性在IOC容器中是唯一的
- 若id没有指定,Spring自动将类名作为Bean的名字
- id可以指定多个名字,名字之间可用逗号、分号、空格分隔
二、Spring容器
在Spring IOC容器读取Bean配置并创建Bean实例之前,必须对它进行实例化。只有容器实例化之后,才可以从IOC容器中获取Bean实例并使用。 Spring提供了两种类型的IOC容器实现,无论使用哪种方式,配置文件时完全相同:
- BeanFactory:IOC容器的基本(底层)实现。BeanFactory是Spring框架的基础设施,面向Spring本身;
- ApplicationContext:提供了更多的高级特性,是BeanFactory的子接口。ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory。
三、ApplicationContext
ApplicationContext有两个主要的实现类:
- ClassPathXmlApplicationContext:从类路径下加载配置文件
- FileSystemXmlApplicationContext:从文件系统中加载配置文件
ConfigurableApplicationContext是ApplicationContext的子接口,增加了refresh()、close()等方法,让ApplicationContext具有了启动、刷新、关闭上下文的能力。
注意:
- ApplicationContext在初始化上下文时就会实例化所有的单例Bean,及其scope(作用域)属性为singleton的Bean。
- WebApplicationContext是专门为Web应用而准备的,它允许从相对于Web根目录的路径中完成初始化工作。
四、依赖注入
Spring支持3种依赖注入的方式,分别是:
- 属性注入(Setter注入)
- 构造器注入
- 工厂方法注入
1、属性注入
<bean id="helloWorld" class="cn.javacodes.spring.beans.HelloWorld">
<property name="name" value="Spring 4.0" />
</bean>
- 属性注入即通过setter方法注入Bean的属性值或依赖的对象;
- 属性注入使用
元素,使用name指定Bean的属性名称,value属性或 子节点指定属性值,使用ref属性指定依赖的对象; - 属性注入是最常用的注入方式;
2、构造方法注入
通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean在实例化后就可以使用。 构造器注入在
<!-- 构造器注入-通过索引 -->
<bean id="car0" class="cn.javacodes.spring.beans.Car">
<constructor-arg value="A6L" index="0"></constructor-arg>
<constructor-arg value="奥迪" index="1"></constructor-arg>
<constructor-arg value="15648" index="2"></constructor-arg>
<constructor-arg value="240" index="3"></constructor-arg>
</bean>
(2)按类型匹配入参
<!-- 构造器注入-通过类型 -->
<bean id="car1" class="cn.javacodes.spring.beans.Car">
<constructor-arg value="卡宴" type="java.lang.String"/>
<constructor-arg value="保时捷" type="java.lang.String"/>
<constructor-arg value="260" type="double"/>
</bean>
3、工厂方法注入
有时候静态工厂方法是实例化对象的唯一方法。Spring支持通过
package cn.javacodes.spring.beans;
/**
* Created by eric on 16-8-31.
*/
public class Stage {
private Stage() {
}
private static class StageSingletonHolder {
static Stage instance = new Stage();
}
public static Stage getInstance() {
return StageSingletonHolder.instance;
}
}
我们注意到该类只有一个private的构造方法,而并未提供公开的构造方法,因此在Spring中不能直接通过之前所述的方式来获得该类的bean对象。为了解决这个问题,Spirng的
<!-- 静态工厂方法注入-->
<bean id="theStage" class="cn.javacodes.spring.beans.Stage" factory-method="getInstance" />