寒假学习笔记第四篇

1. **配置元数据(配置)**

配置元数据,既是编写交给SpringIoC容器管理组件的信息,配置方式有三种。

基于 XML 的配置元数据的基本结构:

<bean id="..." [1] class="..." [2]>
<!-- collaborators and configuration for this bean go here -->
</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
https://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="..." [1] class="..." [2]>
<!-- collaborators and configuration for this bean go here -->
</bean>

<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
```

Spring IoC 容器管理一个或多个组件。这些 组件是使用你提供给容器的配置元数据(例如,以 XML `<bean/>` 定义的形式)创建的。

<bean /> 标签 == 组件信息声明

- `id` 属性是标识单个 Bean 定义的字符串。
- `class` 属性定义 Bean 的类型并使用完全限定的类名。
2. **实例化IoC容器**

提供给 `ApplicationContext` 构造函数的位置路径是资源字符串地址,允许容器从各种外部资源(如本地文件系统、Java `CLASSPATH` 等)加载配置元数据。

我们应该选择一个合适的容器实现类,进行IoC容器的实例化工作:

```Java
//实例化ioc容器,读取外部配置文件,最终会在容器内进行ioc和di动作
ApplicationContext context =
new ClassPathXmlApplicationContext("services.xml", "daos.xml");
```
3. **获取Bean(组件)**

`ApplicationContext` 是一个高级工厂的接口,能够维护不同 bean 及其依赖项的注册表。通过使用方法 `T getBean(String name, Class<T> requiredType)` ,您可以检索 bean 的实例。

允许读取 Bean 定义并访问它们,如以下示例所示:

```Java
//创建ioc容器对象,指定配置文件,ioc也开始实例组件对象
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
//获取ioc容器的组件对象
PetStoreService service = context.getBean("petStore", PetStoreService.class);
//使用组件对象
List<String> userList = service.getUsernameList();
```

1. 目标

Spring IoC 容器管理一个或多个 bean。这些 Bean 是使用您提供给容器的配置元数据创建的(例如,以 XML `<bean/>` 定义的形式)。

我们学习,如何通过定义XML配置文件,声明组件类信息,交给 Spring 的 IoC 容器进行组件管理!
2. 思路

![](http://heavy_code_industry.gitee.io/code_heavy_industry/assets/img/img006.c8bae859.png)
3. 准备项目
1. 创建maven工程(spring-ioc-xml-01)
2. 导入SpringIoC相关依赖

pom.xml

```XML
<dependencies>
<!--spring context依赖-->
<!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.6</version>
</dependency>
<!--junit5测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>
```
4. 基于无参数构造函数

> 当通过构造函数方法创建一个 bean(组件对象) 时,所有普通类都可以由 Spring 使用并与之兼容。也就是说,正在开发的类不需要实现任何特定的接口或以特定的方式进行编码。只需指定 Bean 类信息就足够了。但是,默认情况下,我们需要一个默认(空)构造函数。

1. 准备组件类

```Java
package com.atguigu.ioc;


public class HappyComponent {

//默认包含无参数构造函数

public void doWork() {
System.out.println("HappyComponent.doWork");
}
}
```
2. xml配置文件编写

创建携带spring约束的xml配置文件

编写配置文件:

文件:resources/spring-bean-01.xml

```Java
<!-- 实验一 [重要]创建bean -->
<bean id="happyComponent" class="com.atguigu.ioc.HappyComponent"/>
```

- bean标签:通过配置bean标签告诉IOC容器需要创建对象的组件信息
- id属性:bean的唯一标识,方便后期获取Bean!
- class属性:组件类的全限定符!
- 注意:要求当前组件类必须包含无参数构造函数!
5. 基于静态工厂方法实例化

> 除了使用构造函数实例化对象,还有一类是通过工厂模式实例化对象。接下来我们讲解如何定义使用静态工厂方法创建Bean的配置 !

1. 准备组件类

```Java
public class ClientService {
private static ClientService clientService = new ClientService();
private ClientService() {}

public static ClientService createInstance() {

return clientService;
}
}
```
2. xml配置文件编写

文件:resources/spring-bean-01.xml

```XML
<bean id="clientService"
class="examples.ClientService"
factory-method="createInstance"/>
```

- class属性:指定工厂类的全限定符!
- factory-method: 指定静态工厂方法,注意,该方法必须是static方法。
6. 基于实例工厂方法实例化

> 接下来我们讲解下如何定义使用实例工厂方法创建Bean的配置 !

1. 准备组建类

```Java
public class DefaultServiceLocator {

private static ClientServiceImplclientService = new ClientServiceImpl();

public ClientService createClientServiceInstance() {
return clientService;
}
}
```
2. xml配置文件编写

文件:resources/spring-bean-01.xml

```XML
<!-- 将工厂类进行ioc配置 -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
</bean>

<!-- 根据工厂对象的实例工厂方法进行实例化组件对象 -->
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
```

- factory-bean属性:指定当前容器中工厂Bean 的名称。
- factory-method: 指定实例工厂方法名。注意,实例方法必须是非static的!

posted @ 2024-01-17 07:54  摆烂达人  阅读(1)  评论(0编辑  收藏  举报