# Spring IOC 容器

# 安装依赖

通过 Maven 安装 spring-context 依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.3</version>
    </dependency>
</dependencies>

# 配置 IOC 容器

有三种配置方法:

# 基于 XML

新建 applicationContext.xml 文件,文件内容参考官网 (opens new window)

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 使用 setter 创建 Bean -->
    <bean id="..." class="...">  
        <property name="..." value="..."></property>
    </bean>

    <!-- 使用构造函数创建 Bean -->
    <bean id="..." class="...">
        <constructor-arg name="..." value="..."></constructor-arg>
        <constructor-arg index="..." value="..."></constructor-arg>
    </bean>

    <!-- 使用静态工厂创建 Bean -->
    <bean id="..." class="..." factory-method="..." />

    <!-- 使用工厂实例创建 Bean -->
    <bean id="factory..." class="..." />
    <bean id="..." factory-bean="factory..." factory-methods="..." />
</beans>

在代码中创建 ApplicationContext,并获取 Bean 实例,下面的代码对应于官方文档 (opens new window)

public class SpringApplication {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取 Bean 实例:context.getBean("xxx", xxx.class);
    }
}

# 基于注解

在 xml 中开启 component-scan 后,可以使用 @Component 声明 Bean,使用 @Autowired 注入 Bean。

# 琐碎知识点

ClassPathXmlApplicationContext 的 configLocation 参数还是有点复杂的,见 API 文档。

这篇教程 (opens new window)介绍了如何注入集合类型的对象。

# 考点

说实话我个人很反感背题库。

  • Bean 的 id 和 name 有什么区别?
  • 定义 Bean 的时候如果 id 和 name 都没有定义,那么会发生什么?