SpringBoot入门学习笔记四(@SpringBootApplication注解)

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/103026876







本篇主要来讲解 @SpringBootApplication注解,本篇没有具体示例,只是简单的理论介绍,初学者了解即可。

我们一般将被 @SpringBootApplication注解 修饰的类称之为是 Spring Boot 的主配置类Spring Boot 之所以能提供强大的功能,全是因为依赖了这个注解。我们开启项目就是从主配置类中的 main方法 开启的,所以主配置类配置的一切信息,都是对整个项目的配置。

这个注解中包含了很多子注解,我们今天就来主要看一下 @SpringBootConfiguration@EnableAutoConfiguration 这两个注解。

@SpringBootApplication注解

@SpringBootApplication注解结构


一、@SpringBootConfiguration注解

@SpringBootConfiguration注解 是 Spring Boot 的配置类注解

在这个注解中包含一个非常重要的注解 —— @Configuration注解,被 @Configuration注解 修饰的类 表示 “配置类”

我们以前写的 “配置文件” 可能在大型项目中配置项会过于庞大,而为了解决这个问题,Spring Boot 更推荐我们使用 “配置类” 来代替 “配置文件”

加了 @Configuration注解 的类,会自动纳入到 Spring容器 中。(通过源码得知:在 @Configurtion注解 中包含了 @Component@Component注解 表示交由 Spring 进行管理】)

// 表示 A 这个类是一个用于 配置的类
@Configuration
public class A {
	// ...
}

@SpringBootConfiguration注解一

@SpringBootConfiguration注解二



二、@EnableAutoConfiguration注解

@EnableAutoConfiguration注解 是 自动配置注解。该注解能使 Spring Boot 实现自动配置。

在这个注解中包含 @AutoConfigurationPackage注解,被 @AutoConfigurationPackage注解 修饰的类会将该类所在的包纳入到扫描器中,就不再需要我们手动进行注册了。

根据源码可知: Spring Boot 在启动时,会根据该注解所在包中的 META-INF/spring.factories 文件,找到相应的三方依赖配置信息,并将这些依赖引入本项目。 Spring Boot 的核心理念就是 “习惯优于配置”,它的主要实现就是 @EnableAutoConfiguration注解。( spring.factories文件已经包含了市场上所有主流的三方依赖初始配置信息

总的来说,@EnableAutoConfiguration注解 的作用就是将该包及其所有子包全部纳入 Spring容器

package com.example.Demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// 此注解会将 com.example.Demo 纳入到 Spring容器 中
@SpringBootApplication
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

@AutoConfigurationPackage注解

spring.factories文件



三、如何实现自动装配?(以 HttpEncodingAutoConfiguration类 为例)

我们可以考虑一下,Spring Boot 是如何实现自动装配的?

我们以 HttpEncodingAutoConfiguration类 为例,通过观察其源码了解如何进行自动装配。 (此类的全类名为:org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration)


我们通过源码可知,此类共有五个注解: @Configuration、@EnableConfigurationProperties、@ConditionalOnWebApplication、@ConditionalOnClass、@ConditionalOnProperty

1、@Configuration

@Configuration(proxyBeanMethods = false)

这个注解用来标识 HttpEncodingAutoConfiguration类 是一个配置类,并将这个类纳入 Spring 容器中;


2、@EnableConfigurationProperties

@EnableConfigurationProperties(HttpProperties.class)

这个注解是用来配置 HttpEncodingAutoConfiguration类 的字符集编码(也就是配置整个项目的字符集编码),通过参数中 HttpProperties 这个类能将字符集编码设置为 UTF_8(即自动装配为 UTF_8)。

如果需要要改变字符集编码,我们可以在配置文件(yml/properties)中来手动来修改配置,如下图:

application.properties文件

注意: 通过此配置可以将整个项目的字符集编码设置成 UTF_16,可能有小伙伴有疑问,字符集编码的 key (spring.http.encoding.charset)能否修改呢?答案是不可以的。因为在 Spring Boot 中早已规定好了这个 key 的名字,我们可以进入 @EnableConfigurationProperties注解 中的参数 HttpProperties类 的源码中找到这个key的名字(@ConfigurationProperties注解中的 prefix参数),如下图:

HttpProperties类

HttpProperties类2

从上图可以看出,key 名字的基本格式是:prefix.属性名。而在字符集中 prefix 的值是 spring.http,属性名是 encoding对象 中的 charset,连起来就是: spring.http.encoding.charset

而具体的值,我们可以通过 StandardCharsets类 的源码得知,字符集编码的可选值有: US_ASCIIISO_8859_1UTF_8UTF_16BEUTF_16LEUTF_16

StandardCharsets类


3、@ConditionalOnWebApplication

@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)

这个注解 说明了 如果当前项目是一个 Web应用 时(servlet),这个条件就成立。


4、@ConditionalOnClass

@ConditionalOnClass(CharacterEncodingFilter.class)

这个注解 说明了 如果 CharacterEncodingFilter类 存在时,这个条件就成立。


5、@ConditionalOnProperty

@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)

这个注解 说明了 如果在配置文件中 spring.http.encoding.enabled 这个属性存在时,这个条件就成立。
它在配置文件中的格式是 spring.http.encoding.enabled=XXX

matchIfMissing 属性 是用来检测在配置文件中的 spring.http.encoding.enabled 这个属性。如果没有配置,则成立;如果已配置,则不成立。



注: 以上三个注解是条件注解( Conditional 是条件的意思),当 On 后面的类存在时,这个条件才成立,当这三个条件同时都成立时,HttpEncodingAutoConfiguration 这个配置类才会被执行,它的配置才会生效。



6、自动装配总结

1)每一个 XxAutoConfiguration类 中都有很多条件注解( @ConditionalOnXxx ),当这些条件都满足时,此配置会自动装配生效(如:HttpEncodingAutoConfiguration类)。我们也可以手动修改 这些配置,我们要在 XxxProperties文件 中的找到 prefix 和 对应的 属性名。(key的基本格式是:prefix.属性名=value

2)全局配置文件中的 key,是来源于某个 XxxProperties文件 中的 prefix.属性名 。如果您想知道该 Spring Boot 项目中开启了哪些自动装配、禁止了哪些自动装配,只需要在 application.properties文件 中 配置:debug=true。我们在开启项目后,会在控制台打印出装配的配置信息,其中 Positive matches 表示这个列表自动开启的装配,Negative matches 表示此时并没有启用的装配。

debug1

debug2



四、本篇总结

在我们以前编写项目时,一般会 对自己写的代码 以及 三方依赖 进行配置。而 Spring Boot 可以对我们一些常规的配置进行自动配置,主要实现全靠 @SpringBootApplication注解

1、自己写的代码

我们自己写的代码,可以通过 @SpringBootConfiguration注解 进行 Spring Boot 自动配置;

2、三方依赖

三方依赖,我们也可以通过 spring-boot-autoconfigure-2.1.7.RELEASE.jar 中的 META-INF/spring.factories 文件,然后通过 @EnableAutoConfiguration注解 开启使用即可。spring-boot-autoconfigure-2.1.7.RELEASE.jar包 中包含了整个 J2EE 整合体系中所需要的依赖。



博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans Spring-Context Spring-Context-Support Spring-Expression AOP Spring-AOP Spring-Aspects Messaging Spring-Messaging WEB Spring-Web Spring-Webmvc Spring-WebSocket Spring-Webmvc-Portlet 数据访问/集成(DataAccess/Intefration) Spring-JDBC Spring-TX Spring-ORM Spring-OXM Spring-JMS Spring的生态 Spring Boot Spring XD Spring Cloud Spring Data Spring Integration Spring Batch Spring Security Spring HATEOAS Spring Social Spring AMQP Spring Mobile Spring for Android Spring Web Flow Spring Web Services Spring LDAP Spring Session Spring项目快速搭建 Maven简介 Maven安装 Maven的pom.xml dependencies dependency 变量定义 编译插件 Spring项目的搭建 Spring Tool Suite https://spring.io/tools/sts/all IntelliJ IDEA NetBeans https://netbeans.org/downloads/ Spring基础配置 依赖注入 声明Bean的注解 @Component组件,没有明确的角色 @Service在业务逻辑层(service层) @Repository在数据访问层(dao层) @Controller在展现层(MVC→SpringMVC) 注入Bean的注解 @Autowired:Spring提供的注解 @Inject:JSR-330提供的注解 @Resource:JSR-250提供的注解 Java配置 @Configuration声明当前类是一个配置类 @Bean注解在方法上,声明当前方法的返回值为一个Bean AOP @Aspect 声明是一个切面 拦截规则@After @Before @Around PointCut JoinPoint Spring常用配置 Bean的Scope Singleton Prototype Request Session GlobalSession SpringEL和资源调用 注入普通字符 注入操作系统属性 注入表达式云算结果 注入其他Bean的属性 注入文件内容 注入网址内容 注入属性文件 Bean的初始化和销毁 Java配置方式 注解方式 Profile @Profile 通过设定jvm的spring.profiles.active参数 web项目设置在Servlet的context parameter中 事件Application Event 自定义事件,集成ApplicationEvent 定义事件监听器,实现ApplicationListener 使用容器发布事件 Spring高级话题 Spring Aware BeanNameAware BeanFactoryAware
好的,我可以和你分享一些关于Spring Boot的学习笔记。 1. Spring Boot是什么? Spring Boot是一个基于Spring框架的快速开发框架,它能够帮助开发者快速搭建Spring项目,简化了Spring应用开发的繁琐过程,提高了开发效率。 2. Spring Boot的优点有哪些? Spring Boot的优点有很多,其中包括: - 简化了Spring应用的开发,提高了开发效率; - 集成了很多常用的第三方库,减少了依赖管理的工作; - 自动化配置,减少了配置文件的编写工作; - 内嵌了Tomcat等Web容器,使得应用的部署更加便捷; - 提供了Actuator等模块,使得应用的监控和管理更加便捷。 3. Spring Boot的核心注解有哪些? Spring Boot的核心注解包括: - @SpringBootApplication:标注在启动类上,代表这是一个Spring Boot应用; - @Controller:标注在控制器类上,处理HTTP请求; - @Service:标注在服务类上,用于处理业务逻辑; - @Repository:标注在数据访问类上,用于数据库访问; - @Configuration:标注在配置类上,用于配置Spring应用上下文。 4. Spring Boot的配置文件有哪些? Spring Boot的配置文件包括: - application.properties:基于Key-Value的属性文件; - application.yml:基于YAML语法的配置文件。 5. 如何使用Spring Boot集成数据库? 使用Spring Boot集成数据库需要完成以下几个步骤: - 在pom.xml中添加相关数据库依赖; - 配置数据源和JPA/Hibernate等相关配置; - 编写实体类和DAO层代码。 以上就是一些关于Spring Boot的学习笔记,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小异常

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值