springboot常用类,springboot程序入口

  springboot常用类,springboot程序入口

  

目录

入口类和@ spring boot应用程序@组件可以相关使用@启用自动配置关闭自动配置为什么是斯普林布主程序类,主入口类主程序类,主入口类

 

  

入口类和@SpringBootApplication

跳靴项目创建完成之后默认会生成一个*应用的入口类,通过该类的主要的方法即可启动跳羚项目。

 

  @ spring boot应用程序(exclude=数据源自动配置。类)公共类spring boot运行应用程序{ public static void main(String[]args){ spring application。运行(spring boot运行应用程序。class,args);}}在此入口类中,我们可以看到跳羚创建的业务代码中(除单元测试)唯一的一个注解——@SpringBootApplication,这也是跳羚的核心注解。

  源代码如下:

  @Target(ElementType .TYPE)@ Retention(保留策略.运行时)@ documentated @ Inherited @ spring boot configuration @ enable auto configuration @ components can(exclude filters={ @ Filter(type=Filter type .CUSTOM,classes=typeexcludefilter。class),@Filter(type=FilterType .CUSTOM,classes=autoconfigurationexcludefilter。class)})public @ interface spring boot应用程序{/* * *根据类排除不使用的自动配置*/@ alias for(annotation=启用自动配置。类)类?[]排除()默认{ };/** * 根据类名排除不使用的自动配置*/@ alias for(annotation=启用自动配置。class)String[]排除名称()默认值{ };/** * 指定扫描的包*/@ alias for(annotation=components can。class,attribute= base packages )String[]scanbase packages()default { };/** * 指定扫描的类*/@ alias for(annotation=components can。Class,attribute= base package classes )Class。[]scanbasecacapkageclasses()default { };}该注解自身为我们提供了四个可配置项:

  排除:根据类排除不使用的自动配置;排除名称:根据类名排除不使用的自动配置;scanBasePackages:扫描指定的包;scanbasecapackageclasses:扫描指定的类;@SpringBootApplication组合了@SpringBootConfiguration 、@EnableAutoConfiguration 、@ComponentScan,因此我们也可以直接使用这三个注解来替代它。

  在早期版本并没有@SpringBootConfiguration,之后使用了@SpringBootConfiguration并在其中组合了@配置注解。在@启用自动配置注解中组合了@AutoConfigurationPackage。

  

@ComponentScan相关使用

@ComponentScan用来指定扫描的组建所在的包路径或班级文件。在不指定参数的时候,跳靴的@ComponentScan默

 

  认会扫描同目录及同目录下级目录的类文件。通过部分源码我们可以明确的看到。

  

@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})@Documented@Repeatable(ComponentScans.class)public @interface ComponentScan {      @AliasFor("basePackages")    String[] value() default {};    @AliasFor("value")    String[] basePackages() default {};    ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;    String resourcePattern() default “**/*.class";    // 省略掉部分源码}

上面的源码重点看一下属性resourcePattern的默认值**/*.class,可以看出,如果不指定其他参数的话,默认会去寻找同级目录下的class。

 

  在构造SpringBoot项目时,往往会出现这样一种情况:因为忘记或不知道SpringBoot默认扫描的路径,随意创建包和类的位置,导致项目启动之后,无法实例化对应的组建,无法正确访问接口。

  当然,如果是有意为之,那么我们就可以使用@SpringBootApplication或@ComponentScan来指定一些特殊的需要实例化的包或类。

  

@SpringBootApplication(scanBasePackages = “com.secbro2.controller")// 或@ComponentScan(basePackages = "com.secbro2.controller")

 

  

@EnableAutoConfiguration

@EnableAutoConfiguration让SpringBoot可以根据类路径中的jar包依赖可以为项目进行一些自动配置。这也是SpringBoot最核心的功能。当然,前提条件是依赖需要按照starter的规则来构建。

 

  比如,我们添加了web的starter,那么SpringBoot就会自动添加Tomcat和SpringMVC的依赖,然后又会进行一些相应的默认配置。但有些依赖需要我们自己去配置一些内容,比如虽然引入了data-jpa的starter,但是如果我们不配置对应的数据源,程序肯定没办法正常启动。

  

 

  

关闭自动配置

自动配置有它的便捷之处,但在某些情况下,我们可能并不需要一些自动配置。比如,虽然引入了data-jpa的依赖,但此刻并不需要连接数据库。那么,就可以通过注解将此自动配置进行关闭。@SpringBootApplication为我们提供了相应的功能。

 

  

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

 

  

为什么是SpringBoot

面试中可能会被问到:为什么我们要使用SpringBoot?

 

  你可能会说:因为SpringBoot用java配置替代了xml配置,或因为它内置Tomcat,可以直接打成jar包,通过java -jar快速启动等;但这都不是重点,重点是刚刚说的@EnableAutoConfiguration实现的功能:自动配置。基于编程的一个共识:约定优于配置。这也正是SpringBoot的核心。

  回想一下,在使用SpringBoot的过程中,当用到某个组件,只需引入相应的依赖(starter)。此时SpringBoot已经帮我们把相关的依赖引入,配置好最基本的参数。然后我们根据需要再在application.yml文件中配置一些明确的参数(比如:数据库地址、用户名等),就完成了一个组件的集成,可以专注业务代码的编写了。

  

 

  

SpringBoot主程序类,主入口类

 

  

主程序类,主入口类

/** * @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用 */@SpringBootApplicationpublic class HelloWorldMainApplication {    public static void main(String[] args) {        SpringApplication.run(HelloWorldMainApplication.class,args);    }}

@SpringBootApplication:Spring Boot应用标注在某个雷尚说明这个类是Spring Boot的主配置类,Spring Boot就应该允许这个类的main方法来启动SpringBoot应用;@SpringBootConfiguration:SpringBoot的配置类;表追在某个类上,标识这是一个SpringBoot的配置类@Configuration: 配置雷尚来标注这个注解配置类----配置文件;配置类也是容器中的一个组件;@Component

 

  @EnableAutoConfiguration:开启自动配置功能,以前我们需要配置的东西,SpringBoot开启自动配置功能;这样自动配置才能生效;@AutoConfigurationPackage:自动配置包

@Import(AutoConfigurationPackages.Registrar.class);

Spring的底层注解@import,给容器中导入一个组件;导入 的组件由AutoConfigurationPackages.Registrar.class

 

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

  

@Import(AutoConfigurationPackages.Registrar.class);

给容器中导入组件

 

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: