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在实例化后就可以使用。 构造器注入在元素里声明属性,中常用的属性有value、 index、type等,注意:没有name属性。 (1)按索引匹配入参

    <!-- 构造器注入-通过索引 -->
    <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支持通过元素的factory-method属性类装配工厂创建的bean。 例如如下是一个Stage单例类:

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的标签提供了一个factory-method属性,配置如下所示:

<!-- 静态工厂方法注入-->
    <bean id="theStage" class="cn.javacodes.spring.beans.Stage" factory-method="getInstance" />
posted @ 2021-02-25 01:06  JeffreyHu  阅读(56)  评论(0编辑  收藏  举报