Spring 中的自动装配

2024 年 8 月 29 日 | 阅读 3 分钟

Spring 框架的自动装配功能使您可以隐式地注入对象依赖项。 它在内部使用 setter 或构造函数注入。

自动装配不能用于注入原始类型和字符串值。 它仅适用于引用。


自动装配的优点

它需要更少的代码,因为我们不需要编写代码来显式地注入依赖项。


自动装配的缺点

程序员无法控制。

它不能用于原始类型和字符串值。


自动装配模式

有很多自动装配模式

编号。众数描述
1)这是默认的自动装配模式。 这意味着默认情况下不进行自动装配。
2)byNamebyName 模式根据 bean 的名称注入对象依赖项。 在这种情况下,属性名称和 bean 名称必须相同。 它在内部调用 setter 方法。
3)byTypebyType 模式根据类型注入对象依赖项。 因此,属性名称和 bean 名称可以不同。 它在内部调用 setter 方法。
4)构造函数构造函数模式通过调用类的构造函数来注入依赖项。 它调用具有大量参数的构造函数。
5)autodetect自 Spring 3 以来已弃用。

自动装配示例

让我们看看在 spring 中使用自动装配的简单代码。 您需要使用 bean 元素的 autowire 属性来应用自动装配模式。

让我们看看 spring 中自动装配的完整示例。 为了创建这个例子,我们创建了 4 个文件。

  1. B.java
  2. A.java
  3. applicationContext.xml
  4. Test.java
B.java

此类仅包含构造函数和方法。

A.java

此类包含 B 类的引用以及构造函数和方法。

applicationContext.xml
Test.java

此类从 applicationContext.xml 文件中获取 bean 并调用 display 方法。

输出

b is created
a is created
hello a
hello b

1) byName 自动装配模式

在使用 byName 自动装配模式的情况下,bean id 和引用名称必须相同。

它在内部使用 setter 注入。

但是,如果您更改 bean 的名称,它将不会注入依赖项。

让我们看看我们将 bean 的名称从 b 更改为 b1 的代码。


2) byType 自动装配模式

在使用 byType 自动装配模式的情况下,bean id 和引用名称可能不同。 但是必须只有一个类型的 bean。

它在内部使用 setter 注入。

在这种情况下,它可以正常工作,因为您已经创建了 B 类型的实例。 您的 bean 名称与引用名称不同也没关系。

但是,如果您有多个一种类型的 bean,它将无法工作并抛出异常。

让我们看看有很多 B 类型 bean 的代码。

在这种情况下,它将抛出异常。


3) constructor 自动装配模式

在使用构造函数自动装配模式的情况下,spring 容器通过最高参数化的构造函数注入依赖项。

如果您在一个类中有 3 个构造函数,零参数、一个参数和两个参数,那么将通过调用两个参数的构造函数来执行注入。


4) no 自动装配模式

在使用 no 自动装配模式的情况下,spring 容器不会通过自动装配注入依赖项。