Spring框架可以说是每个Java程序员都必须会使用的框架。而且,能够熟练使用Spring并且阅读其中的源码是每个程序员进阶的过程中必须要经历的。
对于Spring的源码分析,市面上有很多的书籍和课程。对于一些基础不是特别好的同学来说,看书是一件特别痛苦的事情。对此,我深有体会,当初刚学会Spring的时候,就听前辈推荐了一本经典书籍《Spring In Action》,当时我只看了前三章就看不下去了。。。所以,更多的人倾向于看视频。
不论是看书还是看视频,能把Spring学好的人也并不是特别多,这是为什么呢?很多人在学习的时候,都会有一个误区,就是“资料买到手” == “学会了”,很多人都是在网上看了一些大佬推荐的书籍,或者在线课程的宣传,就觉得,我要是把这些资料弄到手,我就一定能把Spring学好。所以,当你花钱把资料买到手之后,你的大脑就会给你一个激励:我把Spring学好了。很多人当买的书刚到手的时候是最开心的时候。。。然后,学习的动力就开始慢慢的衰退,而且,都会低估学习的难度。渐渐的,买来的书就垫桌脚,或者当枕头了。。。
上面扯了一大堆,下面该切入主题了。既然是开篇我想从SpringBoot开始说起。自从SpringBoot出现之后,因为配置极少,开箱即用的特性,就迅速的火了起来。但是说起SpringBoot的源码,看过的人可能就不太多了(对于新手而言,大佬请忽略)。
我会从遇到的注解开始逐步的分析,可能分析的不会太深入(因为我会的也不多...)
正题:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
这段代码大家都不陌生吧,靠这个main方法,就能把项目启动起来。关键就在@SpringBootApplication
这个注解中,然后我们看一下这个注解里面的细节。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration //表示被标注的类是一个SpringBoot配置类
@EnableAutoConfiguration //开启了自动配置模块
@ComponentScan(excludeFilters = { //包扫描
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
//...
}
在@SpringBootApplication
中,上面四个是元注解,@ComponentScan
是SpringFramework
(也就是我们使用的Spring)中的注解。我们来看一下比较陌生的两个:@SpringBootConfiguration
和@EnableAutoConfiguration
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
我们看到,@SpringBootConfiguration
注解中,使用到了@Configuration
,也是SpringFramework
中的注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
//...
}
在@EnableAutoConfiguration
中,有两个注解:@AutoConfigurationPackage
和@Import
,其中@Import
是SpringFramework
中的注解;我们再来看@AutoConfigurationPackage
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {
}
我们看到其中的@Import
注解。所以,到此为止,把SpringBoot启动类上的@SpringBootApplication
注解简单的过了一遍。我们发现,其中都是使用的SpringFramework
中的注解。接下来的文章,我会从这些基本的注解入手,来分析Spring框架。
闲扯:
这是我第一次写博客,之前就很想写。不过会的东西确实不多,总是怕写不好,总是一拖再拖,就到了现在。我是今年刚毕业的本科生,普通的二本学校,目前在一个不起眼的小公司里做Java开发的工作。平时的工作就是CRUD,领导也不懂技术,所以,自己再不努力就废了。我之前看的东西挺杂的,JVM,并发,设计模式,还有其他的一些东西,感觉看的东西多,都是东一块西一块的,没有形成一个完整的概念,写博客的目的也是在于此。整理一下之前学过的东西,可能在写的过程中会出现一些错误,希望大家能够指出来。
网友评论