一、启动类
@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class,args); } }
二、@SpringBootApplication
@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 {}
点进去会发现他的注解类当中还有很多注解,就是一个自定义组合注解。
接下来来对他组合的注解一一解说。
《2020最新Java根底精讲视频教程和学习路线!》
1、@Target(ElementType.TYPE)
@Target阐明了Annotation(注解)所润饰的对象范畴
取值(ElementType)有:
1.CONSTRUCTOR:用于形容结构器
2.FIELD:用于形容域
3.LOCAL_VARIABLE:用于形容局部变量
4.METHOD:用于形容办法
5.PACKAGE:用于形容包
6.PARAMETER:用于形容参数
7.TYPE:用于形容类、接口(包含注解类型) 或enum申明
2、@Retention(RetentionPolicy.RUNTIME)
注解按生命周期来划分可分为3类:
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保留到class文件中,jvm加载class文件之后,依然存在;
3、@Documented
这个注解只是用来标注生成javadoc的时候是否会被记录。
在自定义注解的时候能够应用@Documented来进行标注,如果应用@Documented标注了,在生成javadoc的时候就会把@Documented注解给显示进去。
4、@Inherited
@Inherited是一个标识,用来润饰注解,自定义注解当中会用到
首先自定义一个注解
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Inheritedpublic @interface ATable { public String name() default "";}
以下是在应用自定义注解的一个场景。
类继承关系中@Inherited的作用
类继承关系中,子类会继承父类应用的注解中被@Inherited润饰的注解
@ATable public class InheritedBase {}public class MyInheritedClass extends InheritedBase {}
接口继承关系中@Inherited的作用
接口继承关系中,子接口不会继承父接口中的任何注解,不论父接口中应用的注解有没有被@Inherited润饰
@ATablepublic interface IInheritedInterface {}public interface IInheritedInterfaceChild extends IInheritedInterface {}
类实现接口关系中@Inherited的作用
类实现接口时不会继承任何接口中定义的注解
@ATablepublic interface IInheritedInterface {}public class MyInheritedClassUseInterface implements IInheritedInterface {}
5、@SpringBootConfiguration
标注在某个类上,示意这是一个Spring Boot的配置类
点进去会发现,他其实也是一个自定义注解
@Configuration学spring的应该对他不生疏
作用:指定以后类是一个配置类,在应用spring的时候刚开始都是xml配置,也正是这个注解,开启了类配置形式。
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Configurationpublic @interface SpringBootConfiguration {}
6、@EnableAutoConfiguration
以前咱们须要配置的货色,Spring Boot会帮咱们主动配置;
@EnableAutoConfiguration通知SpringBoot开启自 动配置性能;这样主动配置能力失效;
点进去会发现@Import,说白了他就是借助@Import的反对,收集和注册特定场景相干的bean定义。
@Import作用:用于导入其余的配置类
而@EnableAutoConfiguration也是借助@Import的帮忙,将所有合乎主动配置条件的bean定义加载到IoC容器,仅此而已!
@SuppressWarnings("deprecation")@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import(EnableAutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration {}
EnableAutoConfigurationImportSelector:导入哪些组件的选择器;
会给容器中导入十分多的主动配置类(xxxAutoConfiguration);
大略的流程就是:
Spring Boot在启动的时候,通过EnableAutoConfigurationImportSelector类,从类门路下的
META-INF/spring.factories中获取EnableAutoConfiguration指定的值(就是上方截图),
以全类名反射的创立形式,将这些值作为主动配置类导入到容器中,主动配置类就失效,
帮咱们进行主动配置工作;
以前咱们须要本人配置的货色,主动配置类都帮咱们配置好了,这也就是应用springboot在应用spring,springmvc不必配置视图解析器、数据库连接池、事务 等配置的起因。间接开箱即用。
当然springboot也给我提供了批改配置的办法,那就是通过yml或者propertie文件来进行批改springboot为咱们配置好的配置默认值。
7、@ComponentScan
作用:用于通过注解指定spring在创立容器时要扫描的包
咱们能够通过basePackages等属性来细粒度的定制@ComponentScan主动扫描的范畴,如果不指定,则默认Spring框架实现会从申明@ComponentScan所在类的package进行扫描。
@ComponentScan("com.gzl")
这也就是springboot启动类为什么放在包外的起因。
三、不应用这个注解是否启动我的项目
把@SpringBootApplication换成以下三个注解,照样能够失常启动。
package com.gzl.cn;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@Configuration@EnableAutoConfiguration@ComponentScanpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class,args); } }
target=https%3A//blog.csdn.net/weixin_43888891)
链接地址:https://blog.csdn.net/weixin_43888891/article/details/110457235