关闭页面特效

springmvc自动配置原理

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

0|1@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,执行其中的代码 完成自动配置(其实就是创建这个框架需要的对象)

在这个注解源码中通过@Import({@AutoConfigurationImportSelector.class})这行代码导入了一个AutoConfigurationImportSelector.class类。 在这个类中通过SpringFactoriesLoader类的静态方法loadFactoryNames方法,读取 Springboot自动配置jar包下的META-INF文件夹中的spring.factories中的指定的类名称。 SpringMvc为例: 配置文件中org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration 配置了SpringMvc的配置。 这个类中配置了注解@Configuration代表当前类为一个配置类。 @ConditionOnClass会监测启动器中是否导入了相关的启动器依赖。 @EnableConfigurationProperties中自动加载了括号中配置类的配置(ServerProperties包含网络端口,地址之类的,配置存放在与spring.factories同级目录中xxx-xxx-metadata.json) 如果@ConditionOnClass监测到启动器已经配置相关依赖会实例化这个类中的需要被配置的对象。 当前类中通过spring ioc注解@Bean实例化如 ResourceResolver,RequestMappingHandlerAdapter,ReuqestMappingHandlerMapping,这三个springmvc需要配置的对象的实例化方法(DispatcherServletAutoConfiguration单独引用)。当前配置类中创建的对象会保存到spring容器中,等待需要时使用。

__EOF__

作  者YXH
出  处https://www.cnblogs.com/YxinHaaa/p/17552197.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   YxinHaaa  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示