[关闭]
@adamhand 2019-03-28T21:56:03.000000Z 字数 1536 阅读 917

spring boot


spring boot启动

spring boot中总是会有一个启动类:

  1. @SpringBootApplication
  2. public class GooseyApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(GooseyApplication.class, args);
  5. }
  6. }

其中@SpringBootApplication注解和SpringApplication.run()spring boot的启动关系很大。

@SpringBootApplication注解

ctrl+左键点开该注解,可以看到该注解又被包括几个注解:

  1. @Target({ElementType.TYPE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Inherited
  5. @SpringBootConfiguration
  6. @EnableAutoConfiguration
  7. @ComponentScan(
  8. excludeFilters = {@Filter(
  9. type = FilterType.CUSTOM,
  10. classes = {TypeExcludeFilter.class}
  11. ), @Filter(
  12. type = FilterType.CUSTOM,
  13. classes = {AutoConfigurationExcludeFilter.class}
  14. )}
  15. )
  16. public @interface SpringBootApplication {

spring boot官方文档说@SpringBootApplication等同于@Configuration+ @EnableAutoConfiguration+@ComponentScan。所以,上面几个比较重要的注解有三个:

@Configuration

@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,可以作为bean被注册到IoC容器中。spring boot推荐使用注解的方式。

XML跟config配置方式的区别:



而基于JavaConfig的配置方式是这样:





而基于JavaConfig的配置形式是这样的:



任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。



而基于JavaConfig的配置形式是这样的:



如果一个bean的定义依赖其他bean,则直接调用对应的JavaConfig类中依赖bean的创建方法就可以了。

@ComponentScan

@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。

可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注