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), ...
随机推荐
- gorm使用小结
增 db.Create(user) db.Save(user) 参数只能用**结构体指针****,因为要根据指针写入该条插入的数据, 所以user可以作为该条数据使用. 新增只能用结构体 save方法 ...
- Linux中的which whereis locate
which which会在PATH环境中搜寻可执行文件 whereis Linux会将系统里面所有的文件都搜集到一个数据库文件中,whereis从这个数据库文件里面寻找文件 locate locate ...
- C#实现多线程的几种方式
前言 多线程是C#中一个重要的概念,多线程指的是在同一进程中同时运行多个线程的机制.多线程适用于需要提高系统并发性.吞吐量和响应速度的场景,可以充分利用多核处理器和系统资源,提高应用程序的性能和效率. ...
- C 语言编程 — 高级数据类型 — 指针
目录 文章目录 目录 前文列表 指针 声明指针 使用指针 NULL 指针 指针的算术运算 指向指针的指针 将指针作为实际参数传入函数 从函数返回指针 一个古老的笑话 前文列表 <程序编译流程与 ...
- spring boot整合maybatis plus 的 文件生成代码
/** * 代码生成 */public class AutoGenerator_ { public static void main(String[] args) { AutoGenerator ge ...
- c++ lambda学习举例
#include <iostream> #include<vector> #include<algorithm> #include<cmath> #in ...
- 经验分享之会员 SaaS 系统
经验分享之会员 SaaS 系统 一.前言 2018年,这是不平凡的一年:互联网行业的中台战略.会员经济等模式如火如荼,同时也逐渐地走入我们公司每个人的视野.在南海集团的战略规划背景下,当时我所在的公司 ...
- 微服务实践k8s&dapr开发部署实验(3)订阅发布
自托管模式运行dapr 新建订阅webapi项目,取名为backend 项目增加docker支持,取消https支持 修改Program.cs var builder = WebApplication ...
- leetcode阶段总结
1.目前已经刷了大概200道题目 主要使用的语言是python,刷完之后,发现盲写部分语法依然记不住: 以后刷算法保持一个原则,一定使用不提示代码的工具,纯文本编写,尽量不debug 2.后续尽量使用 ...
- NOIP模拟59
T1 柱状图 解题思路 二分答案+线段树check 显然对于最后的限制,我们希望向上移的和向下移的柱子数尽量接近. 因此枚举每一个柱子当做最高的一个的时刻,二分找到一个当前最优解更新答案. 开两棵线段 ...