Springboot核心注解,Springboot常用注解
与SpringBoot源代码的简单分析相关的注释@ import @ conditionproxybeanmethods属性依赖于自动程序集注释的管理。 autoconfigurationimportselector会自动设置自定义starter流程代码以启动实例化对象流程。 Run方法的内容补充:注释方式IOC的包扫描类
相关评论@Import
可以将此注释导入到相应的组件对象中。 此注释有三种使用方法。 让我简单举个例子。
1、直接使用import导入组件类
2、直接使用import导入可选择的组件类
在import中引入实现ImportSelector接口的类,该类将必须放入容器中的组件的完全限定类名返回给重写方法。
如果对应的完全限定类名不存在,则报告错误。
3、直接使用import导入可选择的组件类
通过import导入实现ImportBeanDefinitionRegistrar接口的类。
虽然重写方法为空返回,但您可以获取BeanDefinitionRegistry来注册组件。
@Condition需要在满足某些条件时实例化一些类并将其添加到spring容器中。
其本质是接口,你可以定制对应的规则匹配。
proxyBeanMethods属性此属性是boot2.0或更高版本的更新,位于@Configuration中
值为true
1 )每次进行完全配置调用时,检查容器中是否已存在此对象实例,如果存在,则返回
2 )调用CGlib子类的代理对象
3 )即使从外部调用在构成类的该组件中注册的方法n次,返回的也是同一对象。 Spring的默认单事例
值为false
1 )跳过lite轻量级放置检查操作,每次调用时直接调用以返回新对象
2 )呼叫对象本身
3 )从外部调用该注册组件的方法返回不同的对象
具体用法:组件是否需要相互依赖,根据需要保证依赖的是容器中的组件,而不是新生成的组件。 ”
已解决的问题:组件依赖
依靠父项目的管理
1 )指定JDK版本、代码集
2 )配置文件部署
爷爷的工程
1 )统一maven版本管理(先声明,后统一管理) )。
打包工程。 使用某些jar包时,只需要相应的场景启动器start,导入了场景启动器的jar包将自动导入。 因为场景启动器为我们打包了jar包,所以我们间接地依赖于这些jar包。
以网络场景启动器为例,它引入了许多相关的依赖关系,如json序列化、嵌入式tomcat等。 不会因为部分软件包部署较少而发生错误。 此外,SpringBoot的父项目统一管理jar包的版本,因此无需考虑版本之间的匹配和冲突。
但是,如果SpringBoot没有正式提供场景启动器,则引入其他插件的场景启动器为需要加上版本号,例如mybatis启动器、durid数据源等。
自动装配注释autoconfigurationimportselector
自动放置1,每个场景的启动器依赖关系传递spring-boot-autuconfig依赖关系坐标。
2、我们找到那个班,发现有很多自动配置(配置文件)
3、但是很多文件都红了,说明不能用。
4、这些文件都在@Conditional的评论下
自定义启动程序流程1,创建新模块,并按照SpringBoot的官方要求进行XXX-Spring-boot-start
2、在模块上写下必要的业务代码
3、在资源下创建/META-INF/spring.factories
文件内容:
1 )配置信息。
2 ) org.spring framework.boot.auto configure.enableautoconfiguration=要自动加载的类的完全限定类名
org.spring framework.boot.auto configure.enableautoconfiguration=com.xx.config.my auto configuration代码启动在这部分中有两个模块第一个是实例化对象的过程,第二个是执行Run方法
实例化对象过程1,并将启动类作为参数传递给run方法
2、如何重载到实例化的spring应用程序类中
3、将班级放入临时容器
调试结果
Run方法1,只有该方法将启动类放入容器中; 其他方法是辅助方法或实例化容器。
2、读取容器内的启动系统
3、找个启动班回去
4、接着找到末尾的load
继续请求调用load
然后调用自己的load方法进行分析,最终将启动类注入IOC容器中
到了这个步骤,就和Spring的注释方式一样。
内容补充:评论方式IOC的包扫描类注入1,创建容器类,传递给相应的扫描类
2、实例化对象,在容器中注册扫描类
细节在这里注入细节。 当@ComponentScan注释的类作为参数传递到启动容器时,不需要像@Comment那样进行注释
原因:要添加此注释,只需通知Spring他是bean类并将其添加到容器中。 但是,如果将Class类传递到以这种方式新创建的容器对象,则不必添加类似@Comment的注释,因为容器已经注册。
启动Tomcat
我们一起更新容器下来,就知道他最后一次走了。
位于名为org.spring framework.context.support.abstractapplicationcontext的类的refresh方法中。 那么就和我们的Spring对接了。
看这个方法的大致分类
Spring提供了需要扩展启动时可以在onRefresh中操作的运行进程的总体模板