likes
comments
collection
share

SpringBoot @SpringBootApplication详解

作者站长头像
站长
· 阅读数 28

前言

  • SpringBoot中有很多注解,当使用@Controller,@Configuration,@SpringBootApplication等一些注解时,写的应用代码之间,并没有手动关联它们,比如,@Controller组件可以读取到@Configuration组件中的内容。但是代码中却不需要显式的将它们组合起来,让它们可以互相访问。
  • 主要通过阅读JavaDoc来了解一下注解有什么功能。

@SpringBootApplication

功能

  • 众所周知,它是多个注解的合并。 SpringBoot @SpringBootApplication详解
  • 表示是个Configuration类,声明了一个或多个@Bean方法,并且会触发auto-configuration和component scanning。这是一个便利注解,和合用 @SpringBootConfiguration, @EnableAutoConfiguration ,@ComponentScan.是等价的。

@SpringBootConfiguration

功能

  • @Configuration的替代方案,而且一个应用只能使用一个SpringBoot @SpringBootApplication详解

它是被@Configuration修饰,说明它是和@Configuration是等价的,但是 @SpringBootConfiguration肯定有它的独特之处,不然直接用 @Configuration就好了。

@Configuration

功能

  • 表示一个类声明了一个或多个 @Bean 方法,并且可以由 Spring 容器处理以在运行时生成 bean 定义和处理请求。 SpringBoot @SpringBootApplication详解

用法

  • 通过AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext启动被@Configuration注解的类。SpringBoot @SpringBootApplication详解

这样就可以拿到@Configuration类中的Bean了。换句话说,Bean注册进Spring容器中了,由Spring管理和生成该Bean。

  • 也可以将Bean定义在xml中。SpringBoot @SpringBootApplication详解
  • 通过组件扫描,来使用被@Configuration注解的类。@Configuration" 注解被 @Component 元注解修饰。,因此 @Configuration 修饰的类是组件扫描的候选者,因此也可以像 @Component 一样利用 @Autowired@Inject。特别是,如果存在一个单一的构造函数,那么自动装配的行为对于开发者来说是隐含的、无需显式声明的Spring将会自动装配所需的BeanSpringBoot @SpringBootApplication详解
  • @Configuration 类不仅可以通过组件扫描来启动,而且它们自己也可以使用 @ComponentScan 注解来配置组件扫描。SpringBoot @SpringBootApplication详解
  • 通过将 Environment 对象注入到 @Configuration 类中,开发者可以在配置类中轻松地访问这些外部化的配置值,并根据需要将它们应用于应用程序的配置。SpringBoot @SpringBootApplication详解
  • 通过 Environment 解析的属性位于一个或多个 "属性源"(property source)对象中,而 @Configuration 类可以使用 @PropertySource注解向 Environment 对象提供属性源。SpringBoot @SpringBootApplication详解
  • 也可以通过 @Value给属性赋值。SpringBoot @SpringBootApplication详解
  • 使用方式还有很多,详见其javaDoc文档。

使用 @Configuration时的注意点

  • 默认情况下,@Bean 方法将在容器启动时立即实例化。为了避免这种情况,@Configuration 可以与 @Lazy 注释结合使用,以指示类中声明的所有 @Bean 方法默认都是延迟初始化的。请注意,@Lazy 也可以用于单个 @Bean 方法。

@Lazy可以注释类也可以注释方法,让Bean在被使用时再实例化。

  • 必须用来修饰类。
  • 类不能用final修饰。
  • 不能修饰方法中的局部变量。
  • 内部类要用static修饰的类才可以用该注解。

@EnableAutoConfiguration

功能

  • 启用 Spring 应用程序上下文的自动配置,尝试猜测和配置您可能需要的 bean。自动配置类通常根据您的类路径和您定义的 bean 进行应用。例如,如果您的类路径中有 tomcat-embedded.jar,您可能希望有一个 TomcatServletWebServerFactory(除非您已经定义了自己的 ServletWebServerFactory bean)
  • exclude()排除某些不需要的Bean。
  • 自动配置总是在用户定义的Bean注册进Spring后再配置
  • 最好是在根目录的类中加。
  • 被@EnableAutoConfiguration修饰的类也是一个普通的@Configuration类。

@ComponentScan

功能

  • 为了与@Configuration类一起使用,配置组件扫描指令。
  • 可以指定basePackageClasses或basePackages(或其别名value)来定义要扫描的特定包。如果未定义特定的包,则将从声明此注解的类的包中进行扫描
转载自:https://juejin.cn/post/7364224622681047074
评论
请登录