文章目录
- 1. 定义
- 2. 特性
- 1)可重用性
- 2)可配置性
- 3)可管理性
- 3. 生命周期
- 1)实例化
- 2)属性设置
- 3)初始化
- 4)使用
- 5)销毁
- 4. 配置方式
- 1)XML配置
- 2)注解配置
- 3) Java 配置
- 5. 作用域
- 6. 依赖注入
- 1)构造函数注入
- 2)Setter方法注入
- 3)接口注入
- 结语
对于 Spring 框架而言,一切 Java 对象皆是 Bean。
在 Java 开发中,Spring 框架是一个广泛使用的轻量级、全面的应用开发框架。而在 Spring 的世界里,Bean 是一个核心概念,贯穿了整个应用的构建和管理。
1. 定义
在 Spring 框架中,Bean 是指由 Spring IoC 容器管理的对象。它可以是 Java 类的实例,也可以是一些由 Spring 提供的特殊对象。Bean 由 IoC 容器实例化、组装和管理,使得应用的开发者可以专注于业务逻辑而不必关心对象的创建和管理。
2. 特性
Bean 的特性有很多,下面我们主要从三个方面去说明一下。
1)可重用性
Bean 是可重用的组件,可以在应用的不同部分或者不同应用中被引用。这种重用性大大简化了代码的开发和维护。
2)可配置性
通过 IoC 容器,我们可以对 Bean 进行配置,包括属性注入、依赖注入等。这使得 Bean 的行为可以在不修改源代码的情况下进行调整。
3)可管理性
IoC 容器负责 Bean 的生命周期管理,包括实例化、初始化、使用和销毁。这简化了对象的生命周期管理,避免了手动进行繁琐的对象创建和销毁工作。
3. 生命周期
1)实例化
在实例化阶段,IoC 容器负责创建 Bean 的实例。这通常涉及到调用 Bean 的构造函数。
2)属性设置
在实例化后,IoC 容器会注入 Bean 的属性。这包括基本数据类型、其他 Bean 引用等。
3)初始化
在属性设置后,IoC 容器会调用 Bean 的初始化方法。开发者可以通过配置指定初始化方法,也可以通过实现InitializingBean
接口来定义初始化逻辑。
4)使用
在初始化后,Bean 进入使用阶段。在这个阶段,Bean 被注入到其他对象中,参与应用的业务逻辑。
5)销毁
在应用关闭或者需要释放资源时,IoC 容器会负责调用 Bean 的销毁方法。开发者可以通过配置指定销毁方法,也可以通过实现 DisposableBean
接口来定义销毁逻辑。
4. 配置方式
1)XML配置
在 XML 配置文件中,我们可以使用 元素定义 Bean 的配置信息,包括类名、属性值、依赖关系等。
上一节 【Spring】00 入门指南 中,我们使用的就是这一种方式
<bean id="springDemo" class="org.example.cheney.SpringDemo">
</bean>
2)注解配置
通过在 Java 类上使用注解(如:@Component),我们可以将一个普通的 Java 类声明为一个 Bean。这种方式更加简洁,提高了代码的可读性。
@Component
public class SpringDemo {
public void hello() {
System.out.println("Hello World");
}
}
3) Java 配置
除了 XML 和注解配置外,Spring 还支持通过 Java 类进行配置(@Configuration + @Bean)。通过 Java 配置类,我们可以以编程的方式定义Bean 及其依赖关系。
@Configuration
public class AppConfig {
@Bean
public SpringDemo springDemo() {
return new SpringDemo();
}
}
5. 作用域
Bean 的作用域定义了 Bean 在 IoC 容器中的生命周期和可见范围。Spring 支持以下几种常见的作用域:
- singleton(默认): 在容器中仅存在一个实例,所有对该 Bean 的请求都返回同一个实例
- prototype: 每次请求都会创建一个新的实例,适用于状态无关的 Bean
- request: 每次 HTTP 请求都会创建一个新的实例,仅在 Web 应用中有效
- session: 每个 HTTP Session 都会创建一个新的实例,同样仅在 Web 应用中有效
6. 依赖注入
Bean 之间的依赖关系可以通过依赖注入来实现,包括构造函数注入、Setter方法注入、接口注入等。这种方式降低了对象之间的耦合度,使得系统更加灵活和可维护。
例如:
我们想向 SpringDemo 类 注入了一个 TestService 的类
1)构造函数注入
通过构造函数向 Bean 注入依赖。
public class SpringDemo {
private final TestService testService;
public SpringDemo(TestService testService) {
this.testService = testService;
}
}
2)Setter方法注入
通过 Setter 方法向 Bean 注入依赖。
public class SpringDemo {
private TestService testService;
public void setTestService(TestService testService) {
this.testService = testService;
}
}
3)接口注入
通过实现特定接口来获取依赖。
public class SpringDemo implements ApplicationContextAware {
private TestService testService;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
this.testService = context.getBean(TestService.class);
}
}
结语
我们知道对于 Spring 框架而言,一切 Java 对象皆是 Bean。这里我们讲解了 Spring 中的 Bean 概念、特性、生命周期、配置方式、作用域以及依赖注入。Bean 作为 Spring 框架的核心,不仅提供了组件化和可维护性,还通过IoC 容器实现了对象的自动化管理,因此我们应该好好去理解。