spring-关于组件的注入及获取流程
一、组件注入的基本流程:
容器初始化:
Spring应用启动时,会读取配置(如XML配置、注解配置等),并根据这些配置创建Bean定义(BeanDefinition)。
根据Bean定义,Spring容器实例化Bean,并管理它们之间的依赖关系。
依赖解析与注入:
当一个Bean依赖于另一个Bean时,Spring容器负责查找并注入这个依赖。
这个过程可以是构造器注入、setter方法注入或者字段注入(基于注解如@Autowired)。
MethodParameter的作用:
在更复杂的场景,如Spring MVC处理HTTP请求时,MethodParameter类扮演了关键角色。它封装了一个方法的参数信息或返回类型信息,包括参数类型、泛型信息、注解等。
对于返回值的处理,如你提供的代码片段中的returnType,Spring会利用它来解析控制器方法的返回类型,决定如何处理返回值,比如是否需要将结果转换为JSON、View等。
二、从IOC获取组件的简化流程示例(结合MethodParameter)
假设有一个控制器方法:
@Controller
public class MyController {
@RequestMapping("/example")
public MyResponse handleRequest() {
// 方法逻辑...
return new MyResponse("Hello, World!");
}
}
1、请求到达:
用户发起HTTP请求到/example。
2、HandlerMapping:
Spring MVC通过HandlerMapping找到对应的控制器方法handleRequest。
3、参数解析:
对于方法的入参,如果有的话,Spring会使用相应的HandlerMethodArgumentResolver解析参数。
4、执行方法:
调用handleRequest方法。
5、处理返回值:
- 使用MethodParameter(如returnType)表示MyResponse的返回类型信息。
- Spring根据returnType选择合适的HandlerMethodReturnValueHandler(如ModelAttributeMethodProcessor、RequestResponseBodyMethodProcessor)来处理返回值。
- 如果配置为JSON响应,RequestResponseBodyMethodProcessor会将MyResponse对象序列化为JSON字符串并通过HttpMessageConverter输出。
6、响应客户端:最终将处理好的响应发送给客户端。
在这个过程中,MethodParameter帮助Spring理解方法的元数据,从而做出正确的依赖解析和处理决策。
spring-关于组件的注入及获取流程的更多相关文章
- spring通过注解依赖注入和获取xml配置混合的方式
spring的xml配置文件中某个<bean></bean>中的property的用法是什么样的? /spring-beans/src/test/java/org/spring ...
- spring给容器中注入组件的几种方式
目录 环境搭建 spring给容器中注入组件 1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名 ...
- 23、自动装配-Aware注入Spring底层组件&原理
23.自动装配-Aware注入Spring底层组件&原理 Aware 接口,提供了类似回调函数的功能 自定义组件想要使用Spring 容器底层的一些组件(Application Context ...
- 2017.3.31 spring mvc教程(二)核心流程及配置详解
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- Spring Framework 组件注册 之 FactoryBean
Spring Framework 组件注册 之 FactoryBean 前言 前两篇文章介绍了如何使用@Component,@Import注解来向spring容器中注册组件(javaBean),本文将 ...
- Spring系列之依赖注入的方式
一.依赖注入方式 对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象 ...
- 谈谈自己了解的spring.NET的依赖注入
spring.net里实现了控制反转IOC(Inversion of control),也即依赖注入DI(Dependency Injection),以达到解耦的目的,实现模块的组件化.程序 ...
- spring六种种依赖注入方式
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...
- Spring学习笔记--依赖注入
依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...
- spring.NET的依赖注入
谈谈自己了解的spring.NET的依赖注入 spring.net里实现了控制反转IOC(Inversion of control),也即依赖注入DI(Dependency Injection), ...
随机推荐
- Rails向数据库添加新字段和修改字段
目录 添加字段 控制台上执行下面的命令 会生成文件db/migrate/20210529131328_add_column_to_black_ips.rb 执行迁移 执行结果 修改字段 添加迁移文件 ...
- Golang、python中MD5、SHA512、base64编码等
在GO中处理的话,比较方便. func main() { fmt.Println(md5Str("woGo")) fmt.Println(sha512Str("woGo& ...
- ibus 输入法导致输入卡顿的解决方案
系统: Zorin OS 16 Pro 基于 Ubuntu 20.04 LTS 关键词:Linux 间歇性卡顿.输入法导致卡顿.无法输入 本问题发生的情形是系统间歇性的无法接受键盘输入,无意间发现切换 ...
- Xcode编译WebKit
下载WebKit源码 1)进入https://webkit.org/ 2)点击页面的 Get Started 进入新页面,如下图所示 3)点击 Getting the code 进入新页面,如下图所示 ...
- nim 3. 各种集合
其实我挺想先去学习一下nim的模块系统,毕竟我决定暂时放弃学习golang,就是因为感觉他的模块和包方面的设计,不像c#+nuget的组合那么舒服. 但是这里还是先学习一下集合吧,感觉这方面nim很有 ...
- 一个网格合并(weld)小工具
在日常开发中会有需求合并多个Mesh网格,并且它们重合处的顶点也要合并,而并非合并成两个subMesh. 而近期刚好在学习Geomipmap的细分,需要把多个mesh块进行合并,于是写了这个脚本 (简 ...
- java学习之旅(day.14)
可变字符串 StringBuffer:可变长字符串,运行效率慢,线程安全 StringBuilder:可变长字符串,运行效率快,线程不安全 package com.zhang.lei; //Strin ...
- SQLServer如何监控阻塞会话
一.查询阻塞和被阻塞的会话 SELECT r.session_id AS [Blocked Session ID], r.blocking_session_id AS [Blocking Sessio ...
- RabbbitMQ RabbitListener使用IP动态队列 Attribute value must be constant
在RabbitMQ消息队列使用 @RabbitListener 接收消息,队列名称使用常量命名,但是如果使用动态队列名称,比如根据系统 ip 命名队列名称. 获取服务器 IP /** * 获取服务器i ...
- vue3 函数式组件
今天看vue3中文文档 看到函数式组件不太理解上面写的 然后自己写了一下才理解上面的自己记录一下 先在子组件里面写上 <script> // dynameic 组件 import { h ...