首页 > 其他分享 >springmvc自动配置原理

springmvc自动配置原理

时间:2023-07-13 21:23:29浏览次数:34  
标签:springmvc spring public 自动 注解 原理 Configuration class

Springboot 这个工具中集成了很多框架,每个框架都有一个xxxAutoConfiguration。

在自动配置jar包中的Spring.facroties中有很多xxxAutoConfiguration对应的就是,每个xxxAutoConfiguration都对应了一个框架的自动配置。

以springmvc框架为例,springmvc框架他对应了一个WebMvcAutoConfiguration

image-20230711203503951

image-20230713092924880

@Configuration    该注解写在哪个类上面 spring容器启动时就会首先创建这个类的对象 然后从这个类上面开始读取注解 同时会调用这个类中所有使用了@Bean注解的方法  将其返回值存放到spring容器中

如果检测到路径中有了Servlet  DispatcherServlet  WebMvcConfigurer(我们导入了springmvc相关的依赖)   @Configuration才会开始工作
否则@Configuration不工作

该类中包含的springmvc四大对象

image-20230711204031326

image-20230711204104823

image-20230711204129917image-20230711204612814

@SpringBootApplication

@SpringBootApplication
public class SpringbootWorkApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootWorkApplication.class, args);
    }
}

主要包含三个注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@SpringBootConfiguration(里面就是@Configuration,标注当前类为配置类,其实只是做了一层封装改了个名字而已)
@EnableAutoConfiguration(开启自动配置)
@ComponentScan(包扫描)

@SpringBootConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration {
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

该注解写在哪个类上面 spring容器启动时就会首先创建这个类的对象 然后从这个类上面开始读取注解 同时会调用这个类中所有使用了@Bean注解的方法 将其返回值存放到spring容器中

@ComponentScan

@ComponentScan:用于扫描启动类所在目录的包及子包下所有spring注解。
Spring ioc: 创建对象和给属性注入值
----- 创建对象----- 
@Controller
@Service
@Repository
@Component
----- 属性注入----- 
@Value
@Autowired
@Qualier
@Resource
@Configuration
@Bean
Spring aop注解
@Aspect 切面
@Before  前置通知
@After 最终通知
@AfterReturning  后置通知
@AfterThrowing 异常通知
@Around 环绕通知
@Transactional  事务
Springmvc注解 也全部启用
@RestController
@ResponseBody 把Java的数据类型转换成json格式
@RequestBody 把json格式转换成Java数据类型
@PathVariable restful风格传参用 (传单个参数)
@RequestMapping 请求路径和要调用的方法进行对应
@RequestParam ?id=1 表格同步传参 名称对不上时使用
@MapperScan() 扫描数据访问层接口所在的包 给你创建数据访问层对象 
@Valid: Hibernate Validate 他的注解  写在controller方法的入参   

@EnableAutoConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage   //自动导包
@Import({AutoConfigurationImportSelector.class}) //自动配置导入选择
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

他会检查我们导入了哪些框架的依赖,然后去spring.factories中去找见对应框架的xxAutoConfiguration,执行其中的代码 完成自动配置(其实就是创建这个框架需要的对象)

标签:springmvc,spring,public,自动,注解,原理,Configuration,class
From: https://www.cnblogs.com/YxinHaaa/p/17552197.html

相关文章

  • ckeditor粘贴word图片且图片自动上传功能
    ​ ueditor粘贴不能粘贴word中的图片是一个很头疼的问题,在我们的业务场景中客户要求必须使用ueditor并且支持word的图片粘贴,因为这个需求头疼了半个月,因为前端方面因为安全的原因是不允许访问本地文件的。首先说一下,ueditor粘贴word图片的问题已经解决,但是不是纯web方法解决的,......
  • shell自动拉取远程仓库和部署代码
    #!/bin/bash#定义一个函数functioncheck_and_update_code(){#获取本地提交标识LOCAL=$(gitrev-parseHEAD)#获取远程提交标识REMOTE=$(gitrev-parseorigin/$1)#如果本地和远程不一致。则代表有更新了if[$LOCAL!=$REMOTE];the......
  • ckeditor粘贴word图片且图片自动上传组件
    ​ 当前功能基于PHP,其它语言流程大抵相同。大概流程:1.将docx文件上传到服务器中2.使用PHPoffice/PHPword实现将word转换为HTML3.将HTML代码返回并赋值到编辑器中 1编辑器配置修改1.1新增上传wordjson配置在ueditor\php\config.json中新增如下配置:     /*......
  • kubernetes 实现 list-watch 的底层原理
    我们都知道,controller-manager,scheduler,kubelet会向apiserver监听感兴趣的对象,当监听对象的内容或状态发生变化后,对应的事件会立即推送到监听者。借由这套事件通知机制,kubernetes才能良好地运转。那么这套事件通知机制是如何实现并驱动的呢?1.etcd在k8s中,apiserver是......
  • Linux基础27 NFS原理, 搭建, NFS挂载卸载, NFS参数
    一、什么是NFS共享存储,文件服务器1.NFS基本概述NFS是NetworkFileSystem的缩写及网络文件系统。NFS主要功能是通过局域网让不同的主机系统之间可以共享文件或目录NFS系统和windows网络共享、网络驱动器类似,只不过windows用于局域网,NFS用于企业集群架构中如果是大型网页,会用到......
  • 自动化运维工具Saltstack详细介绍
         Saltstack是一个新的基础设施管理工具。目前处于快速发展阶段,可以看做是pssh+弱化的Puppet的组合。间接的反映出了saltstack的两大功能:远程执行和配置管理。  Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具。由Master和Minion构成,通过ZeroMQ进......
  • ckeditor粘贴word图片且图片自动上传插件
    ​ 1.编辑器修改(可选)1.1在 ueditor/config.json 中添加代码块    /* 上传word配置 */    "wordActionName":"wordupload",/* 执行上传视频的action名称 */    "wordFieldName":"upfile",/* 提交的视频表单名称 */    "wordPathFormat":"/p......
  • SpringMVC入门案例
                ......
  • ckeditor粘贴word图片且图片自动上传代码
    ​图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM.plugins['autoupload'],然后找到autoUploadHandler方法,注释掉其中的代码。加入下面的代码://判断剪贴......
  • 基于Qt的自动贩卖机系统[2023-07-13]
    基于Qt的自动贩卖机系统[2023-07-13]某公司请你为其生产的自动贩卖机编写软件。这种无人值守自动贩卖机贩卖价值为ABC三种商品,价格分别为2元,3元和6元。顾客投入10元的纸币,然后选择购买3种商品之一,自动贩卖机吐出商品,并且找给用户零钱。如果商品用完,或者无法找零,则给出用户一个提......