LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code,Keep progress,make a better result.
Survive during the day and develop at night。
目录
概 述
现在java项目基本都是springboot项目构建的,我们本着他们提出的约定大于配置的思想,使用起来都特别简单,很多情况下我们主需要引入几个start的jar包,写几个注解就能用,可是你们知道这里面的原理吗?那我们今天就来分析一下springBoot的自动配置原理和start的原理,顺便再自己写一个start来加深印象。
1.@Import是什么
我们之前创建一个Bean可以使用@Configuration与@Bean这两个注解配合使用来将原来配置在xml文件里的bean通过java代码的方式进行描述。
2.@Import注解提供了@Bean注解的功能,可以把一个Bean加入到IOC容器里面,这次@Import的源码分析我就不做了,后续的Spring源码会有这里面的讲解的,这次我们就单纯的看下这个注解是怎样使用的吧。
第二种用法:ImportSelector方式【重点】
这种方式的前提就是一个类要实现ImportSelector接口,假如我要用这种方法,目标对象是Myclass这个类,分析具体如下
第三种用法:ImportBeanDefinitionRegistrar方式
同样是一个接口,类似于第二种ImportSelector用法,相似度80%,只不过这种用法比较自定义化注册,具体如下:
@EnableAutoConfiguration
我看看这个注解,利用我们上面讲的@Import知识,注入了一个AutoConfigurationImportSelector的Bean
我们可以详细的分析一下字段源码做的事情:
这从这个path下获取到这些Metadata,这其实是spi机制,等下再介绍这个。
我们可以看到,这里面只要是左面的key带有ConditionaXXX的后面都有一个value值,我们知道ConditionaonXXX代表着条件注入,就是如果有这个条件,我们就注入对应的Bean。
Starter 是 Spring Boot 中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的 Bean 根据环境( 条件)进行自动配置。使用者只需要依赖相应功能的 Starter,无需做过多的配置和依赖,Spring
Boot 就能自动扫描并加载相应的模块。我们在 Maven 的依赖中加入 spring-bootstarter-web 就能使项目支持 Spring MVC,并且 SpringBoot 还为我们做了很多默认配置,无需再依赖 spring-web、spring-webmvc 等相关包及做相关配置就能够立即使用起来存在很多开箱即用的 Starter 依赖,使得我们在开发业务代码时能够非常方便的、不需要过多关注框架
的配置,而只需要关注业务即可。
总结:
相关工具如下:
分析:
小结:
主要讲述了mybatis 代理模式简单分析,请大家指正~
参考资料和推荐阅读
1.链接: ([参考资(http://c.biancheng.net/view/8480.html).