feat:增加SpringAOP文档
This commit is contained in:
@@ -38,6 +38,12 @@ public class AppConfig {
|
||||
<bean id="userService" class="com.example.UserService"/>
|
||||
```
|
||||
|
||||
::: tip
|
||||
@Service、@Controller这些注解是@Component的衍生注解。
|
||||
@Component注解可以通过@Autowired自动注入,一般用于自己编写的业务模块,需要配合@ComponentScan启用组件扫描(实际开发中@SpringBootApplication注解已经包含了@ComponentScan注解)。
|
||||
@Bean注解一般用于注册第三方库的类。
|
||||
:::
|
||||
|
||||
## 2.4 作用域
|
||||
  控制 Bean 在容器中的实例数量和生命周期。Spring 提供多种作用域,默认是 singleton。通过 @Scope 注解指定,如 @Scope("prototype")。
|
||||
- singleton(单例):容器中只有一个实例,所有请求共享该实例(默认值)。
|
||||
@@ -46,25 +52,32 @@ public class AppConfig {
|
||||
- session(Web):每个会话创建一个实例,在会话有效期内有效。
|
||||
|
||||
## 2.5 生命周期
|
||||
1. 实例化(Instantiation):容器通过构造器创建 Bean 实例(分配内存)。
|
||||
2. 属性注入(Population):容器将依赖的 Bean 注入到当前 Bean 的字段或方法(如 @Autowired 标注的依赖)。
|
||||
3. 初始化前(Post-processing before initialization):
|
||||
执行 BeanPostProcessor 的 postProcessBeforeInitialization 方法(AOP 代理生成在此阶段)。
|
||||
4. 初始化(Initialization):
|
||||
调用 @PostConstruct 注解的方法(JSR-250 标准,推荐)。
|
||||
若实现 InitializingBean 接口,调用 afterPropertiesSet() 方法。
|
||||
执行自定义初始化方法(如 @Bean(initMethod = "init") 中指定的 init 方法)。
|
||||
5. 初始化后(Post-processing after initialization):
|
||||
执行 BeanPostProcessor 的 postProcessAfterInitialization 方法。
|
||||
6. 使用(In Use):Bean 被应用程序调用。
|
||||
7. 销毁(Destruction):
|
||||
调用 @PreDestroy 注解的方法(JSR-250 标准,推荐)。
|
||||
若实现 DisposableBean 接口,调用 destroy() 方法。
|
||||
执行自定义销毁方法(如 @Bean(destroyMethod = "destroy") 中指定的 destroy 方法)。
|
||||
1. 实例化(Instantiation)
|
||||
容器通过构造器创建 Bean 实例(分配内存)。
|
||||
|
||||
2. 属性注入(Population)
|
||||
容器将依赖的 Bean 注入到当前 Bean 的字段或方法(如 @Autowired 标注的依赖)。
|
||||
|
||||
3. 初始化前(Post-processing before initialization)
|
||||
执行 BeanPostProcessor 的 postProcessBeforeInitialization 方法(AOP 代理生成在此阶段)。
|
||||
|
||||
4. 初始化(Initialization)
|
||||
调用 @PostConstruct 注解的方法(JSR-250 标准,推荐)。
|
||||
若实现 InitializingBean 接口,调用 afterPropertiesSet() 方法。
|
||||
执行自定义初始化方法(如 @Bean(initMethod = "init") 中指定的 init 方法)。
|
||||
|
||||
5. 初始化后(Post-processing after initialization)
|
||||
执行 BeanPostProcessor 的 postProcessAfterInitialization 方法。
|
||||
|
||||
6. 使用(In Use)
|
||||
Bean 被应用程序调用。
|
||||
|
||||
7. 销毁(Destruction)
|
||||
调用 @PreDestroy 注解的方法(JSR-250 标准,推荐)。
|
||||
若实现 DisposableBean 接口,调用 destroy() 方法。
|
||||
执行自定义销毁方法(如 @Bean(destroyMethod = "destroy") 中指定的 destroy 方法)。
|
||||

|
||||
|
||||
|
||||
# 三、BeanDefinition
|
||||
## 3.1 定义
|
||||
  BeanDefinition是Spring框架中描述Bean的元数据对象,它包含了创建Bean实例所需的所有信息。
|
||||
@@ -172,7 +185,7 @@ public interface BeanFactory {
|
||||
}
|
||||
```
|
||||
|
||||
## 4.4 实现示例
|
||||
## 4.4 使用示例
|
||||
```java
|
||||
// 创建BeanFactory实例
|
||||
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
|
||||
@@ -193,7 +206,7 @@ UserService userService = beanFactory.getBean("userService", UserService.class);
|
||||
- 延迟加载:默认在第一次请求时才创建Bean实例
|
||||
- 基础功能:提供最基本的IOC功能
|
||||
|
||||
# 五、ApplicationContext
|
||||
# 五、ApplicationContext ★★★
|
||||
## 5.1 定义
|
||||
  ApplicationContext是BeanFactory的子接口,在BeanFactory的基础上提供了更多企业级功能,是Spring容器的完整实现。
|
||||
|
||||
@@ -544,5 +557,5 @@ protected void finishRefresh() {
|
||||
- 标记整个容器启动流程结束,容器进入就绪状态
|
||||
|
||||
### 5.4.13 总结
|
||||
  refresh()方法按固定顺序执行12个步骤,核心可归纳为:准备容器环境 → 解析并注册Bean定义→ 初始化事件、消息等基础设施 → 实例化所有非懒加载的单例Bean→ 完成启动并发布事件。整个过程通过模板方法模式定义,确保了扩展性和一致性。
|
||||
  核心在于两个关键扩展机制:BeanFactoryPostProcessor在Bean定义阶段介入,负责修改和注册Bean的定义信息;BeanPostProcessor在Bean实例化阶段介入,负责对创建好的Bean实例进行增强和包装。
|
||||
  refresh()方法按固定顺序执行12个步骤,核心可归纳为:**准备容器环境 → 解析并注册Bean定义→ 初始化事件、消息等基础设施 → 实例化所有非懒加载的单例Bean→ 完成启动并发布事件**。整个过程通过模板方法模式定义,确保了扩展性和一致性。
|
||||
  核心在于两个关键扩展机制:**BeanFactoryPostProcessor在Bean定义阶段介入,负责修改和注册Bean的定义信息;BeanPostProcessor在Bean实例化阶段介入,负责对创建好的Bean实例进行增强和包装。**
|
||||
|
||||
Reference in New Issue
Block a user