@adamhand
2019-03-28T21:56:03.000000Z
字数 1536
阅读 917
spring boot
中总是会有一个启动类:
@SpringBootApplication
public class GooseyApplication {
public static void main(String[] args) {
SpringApplication.run(GooseyApplication.class, args);
}
}
其中@SpringBootApplication
注解和SpringApplication.run()
与spring boot
的启动关系很大。
ctrl
+左键点开该注解,可以看到该注解又被包括几个注解:
@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 {
spring boot
官方文档说@SpringBootApplication
等同于@Configuration
+ @EnableAutoConfiguration
+@ComponentScan
。所以,上面几个比较重要的注解有三个:
@SpringBootConfiguration
(@SpringBootConfiguration
用@Configuration
)@EnableAutoConfiguration
@ComponentScan
@Configuration
用于定义配置类,可替换xml
配置文件,被注解的类内部包含有一个或多个被@Bean
注解的方法,可以作为bean
被注册到IoC
容器中。spring boot
推荐使用注解的方式。
XML跟config配置方式的区别:
而基于JavaConfig的配置方式是这样:
而基于JavaConfig的配置形式是这样的:
任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。
而基于JavaConfig的配置形式是这样的:
如果一个bean的定义依赖其他bean,则直接调用对应的JavaConfig类中依赖bean的创建方法就可以了。
@ComponentScan
的功能其实就是自动扫描并加载符合条件的组件(比如@Component
和@Repository
等)或者bean
定义,最终将这些bean
定义加载到IoC
容器中。
可以通过basePackages
等属性来细粒度的定制@ComponentScan
自动扫描的范围,如果不指定,则默认Spring
框架实现会从声明@ComponentScan
所在类的package
进行扫描。所以SpringBoot
的启动类最好是放在root package
下,因为默认不指定basePackages
。