您的位置:首页 > 编程语言 > Java开发

《SpringBoot》—— @SpringBootApplication注解

2020-01-14 04:49 561 查看

主程序类,主入口类

@SpringBootApplication:Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;它是一个组合注解,以下是它所有包含的注解;源码解析👇

@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 {

其中最重要的三个注解分别是:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

下面分别剖析一下这三个注解的功效👇

1、@SpringBootConfiguration

@SpringBootConfiguration
:Spring Boot的配置类; 标注在某个类上,表示这是一个Spring Boot的配置类 ;
点进去看他的代码是这样的:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

说明

@SpringBootConfiguration
也是来源于
@Configuration
,二者功能都是将当前类标注为配置类,并将当前类里以
@Bean
注解标记的方法的实例注入到srping容器中,实例名即为方法名。

至于

@Configuration
,我想在非SpringBoot时代大家应该不陌生吧,作用是配置Spring容器,也即 JavaConfig 形式的 Spring IoC 容器的配置类所使用。

2、@EnableAutoConfiguration

@EnableAutoConfiguration
:开启自动配置功能;以前我们需要配置的东西,现在SpringBoot帮我们自动配置;
@EnableAutoConfiguration
告诉SpringBoot开启自动配置功能;这样才生效;
再点进去看他的代码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

说明是借助

@AutoConfigurationPackage
自动配置包的帮助;而
@AutoConfigurationPackage
他是由
@Import
(AutoConfigurationPackages.Registrar.class)来完成功能;
@Import
是Spring的底层注解,给容器中导入一个组件;

@AutoConfigurationPackage是将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

@Import
(EnableAutoConfigurationImportSelector.class)中的 EnableAutoConfigurationImportSelector.class是导入哪些组件的选择器;将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;

有了自动配置类,免去了我们手动编写配置注入功能组件的工作;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, classLoader);

SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作; 以前我们需要自己配置的东西,自动配置类都帮我们做好了;

3、@ComponentScan

@ComponentScan
:会自动扫描指定包下全部标有
@Component
的类,并注册成bean,当然包括@Component下的子注解:@Service,@Repository,@Controller;默认会扫描当前包和所有子包。将这些类自动加载到 Spring 容器中。

@ComponentScan
筛选功能:在扫描类的时候,通过对属性 includeFilters 和 excludeFilters 的设置,可以有对于类型有一个筛选功能。includeFilters 指定了哪些类才能被扫描到,excludeFilters 则相反,指定了哪些类得排除扫描。

@Configuration
@ComponentScan(value="com.learn",excludeFilters={@Filter(type=FilterType.ANNOTATION,value=Service.class)})
public class Config {
}

上述代码:

标注有

@Service
注解的类,会被排除,不会被加载到 Spring 容器中。includeFilters 也有同样的功能,不再举例。


J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.10.RELEASE.jar
  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
小娜~ 发布了12 篇原创文章 · 获赞 13 · 访问量 370 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: