【SpringBoot】注解学习笔记

本文深入解析SpringBoot中@SpringBootApplication注解的含义及其等效的三个核心注解:@Configuration、@EnableAutoConfiguration和@ComponentScan。阐述了这些注解如何协同工作,实现bean管理、自动配置和组件扫描,为SpringBoot项目提供全面的支持。

【是什么】

每个SpringBoot项目的启动类都有一个@SpringBootApplication这个注解,但它到底是什么呢?

1、根据Spring的官方文档介绍,@SpringBootApplication等同于三个注解


2、@SpringBootApplication点进去,删除元注解之后等同于:
@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan

3、@SpringBootConfiguration点进去,删除元注解之后等同于:

@Configuration

至此,证明了官方说的@SpringBootApplication等同于:@Configuration、@EnableAutoConfiguration、@ComponentScan

【为什么】

这些注解的作用是什么?继续分析这三个注解

1、@Configuration

点进去,删除元注解之后等同于:@Component

查Spring官方文档发现@Repository、@Service、@Controller都包含了@Component的注解,一旦被该注解修饰的,都会交给Spring IOC容器管理

那么它的作用应该就是bean管理或者导入配置

官方的说法:allow to register extra beans in the context or import additional configuration classes

2、@ComponentScan

点进去之后发现有我们熟悉的配置参数[basePackages]

它的作用:扫描用户自定义的包中的类,把这些声明特定注解的类交给ICO管理

官方的说法:scan on the package where the application is located 

3、@EnableAutoConfiguration

点击进去,删除元注解之后等同于:

@AutoConfigurationPackage 
@Import({AutoConfigurationImportSelector.class})  导入springboot项目启动所需要的默认类

那它是怎么兼容第三方包的呢?

打开AutoConfigurationImportSelector,在process方法打断点看一下,发现在方法getAutoConfigurationEntry的configurations加载了很多类的全路径

那它是从哪儿加载进来的呢,咱们再点进 getCandidateConfigurations 方法瞧一瞧

看到了一行断言:

No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.

似乎有点眉目了,据此推测应该是在auto configuration 的META-INF/spring.factories下面,找找看

果然在这儿,至此,对SpringBoot的自动装配似乎多了几分了解,但是可以看到,加进来的配置和配置文件的不是完全一样,因为还有@Conditional条件判断,比如那些配置了全路径却没有导包进来的,就会被过滤掉,不会进行实例化。

bean注入的条件判断也是个模块,今天先看到这儿,后续再进一步深入。

【备注】

项目基于SpringBoot2.1.6

### Spring Boot 和 Vue 技术学习资料汇总 #### 一、Spring Boot 配置与集成 MyBatis 在构建基于 Spring Boot 的后端服务时,可以通过 `@MapperScan` 注解实现对 Mapper 文件夹的扫描功能。例如,在启动类中添加如下代码即可完成配置[^1]: ```java @SpringBootApplication @MapperScan("com.example.test.mapper") public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } } ``` 对于前后端分离的应用场景,建议避免在初始阶段引入复杂的数据库依赖(如 MyBatis),以免因未正确配置而导致项目无法正常启动[^2]。 --- #### 二、Swagger 文档工具支持 为了提升 API 开发效率并便于调试接口,可以引入 Swagger 工具库作为文档生成器。以下是 Maven 中的相关依赖配置示例[^3]: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> ``` 通过此方式,开发者能够直观查看 RESTful 接口定义及其调用方法。 --- #### 三、Vue.js 环境搭建指南 针对前端部分,推荐采用官方脚手架工具 vue-cli 构建工程框架。初始化过程中涉及多项选项设定,包括但不限于 TypeScript 支持、路由管理以及状态管理模式的选择等[^5]: | **字段描述** | **可选值说明** | |--------------|----------------| | 使用模板 | 手工创建 (Manually select features) 或预设方案 | | 功能模块 | TS / Router / Vuex | | 版本号 | Vue 3.x | | Class Component | 是否启用 Java 类风格组件 | | Babel 插件 | 结合 TypeScript 转译 | | History Mode | 地址栏 URL 形式 | 安装完成后可通过命令行执行以下指令验证环境是否可用: ```bash npm run serve ``` --- #### 四、前后端联调实践技巧 当分别完成了各自平台的基础建设之后,则需要考虑如何将两者结合起来形成完整的解决方案。一种常见做法是把编译后的静态资源复制至服务器根目录下的特定位置(如 `/resources/static/`)。与此同时调整应用属性文件内的监听端口号参数以匹配实际需求[^2]: ```properties server.port=8443 ``` 最后重启整个应用程序确认一切运转顺畅无误为止。 --- ### 示例代码片段展示 下面给出一段简单演示登录逻辑处理流程的例子供参考之用: ```java @RestController @RequestMapping("/api/auth") public class LoginController { private final UserService userService; public LoginController(UserService userService){ this.userService = userService; } @PostMapping("/login") public ResponseEntity<?> authenticateUser(@RequestBody LoginRequest loginRequest){ Authentication authentication = null; try{ authentication = authService.authenticate(loginRequest.getUsername(), loginRequest.getPassword()); }catch(AuthenticationException e){ return new ResponseEntity<>(new ApiResponse(false,"Invalid username/password supplied"), HttpStatus.UNAUTHORIZED); } SecurityContextHolder.getContext().setAuthentication(authentication); String jwtToken = tokenProvider.generateToken(authentication); return ResponseEntity.ok(new JwtResponse(jwtToken)); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值