核心启动与配置
@SpringBootApplication
:作用:标记在主启动类上。它是三个关键注解的组合:
@SpringBootConfiguration
: 表明该类是一个 Spring Boot 的配置类(继承自@Configuration
)。@EnableAutoConfiguration
: 开启 Spring Boot 的自动配置魔法。根据你添加的 jar 包依赖,自动配置 Spring 应用程序。@ComponentScan
: 自动扫描当前包及其子包下的组件(@Component
,@Service
,@Repository
,@Controller
等),并将它们注册为 Spring Bean。
位置: 应用入口类(
main
方法所在类)。@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
Web开发
@RestController
:作用: 组合注解,相当于
@Controller
+@ResponseBody
。标记的类表示它是一个 RESTful 控制器,其中所有方法的返回值默认直接写入 HTTP 响应体(通常为 JSON 或 XML),而不是跳转到视图。位置: Controller 类上。
@RestController @RequestMapping("/api/users") public class UserController { // ... }
@Controller
:作用: 标记一个类作为 Spring MVC 的控制器。通常用于传统的服务端渲染应用,方法返回视图名称。
位置: Controller 类上(在 RESTful 场景下,通常用
@RestController
替代)。
@RequestMapping
:作用: 映射 HTTP 请求到特定的处理方法(Handler Method)或控制器类。可以指定 URL 路径、HTTP 方法(GET, POST, PUT, DELETE 等)、请求参数、请求头等条件。
位置: 类上(定义类级别的公共路径前缀)或方法上。
变体(更常用、更简洁):
@GetMapping
: 映射GET
请求。@PostMapping
: 映射POST
请求。@PutMapping
: 映射PUT
请求。@DeleteMapping
: 映射DELETE
请求。@PatchMapping
: 映射PATCH
请求。
@RestController @RequestMapping("/api") // 类级别前缀 public class UserController { @GetMapping("/users") // 实际路径: /api/users public List<User> getAllUsers() { ... } @PostMapping("/users") public User createUser(@RequestBody User user) { ... } @GetMapping("/users/{id}") // {id} 是路径变量 public User getUserById(@PathVariable Long id) { ... } }
@PathVariable
:作用: 将 URL 模板变量的值绑定到方法参数上。
位置: 方法参数前。
@RequestParam
:作用: 将 HTTP 请求参数的值绑定到方法参数上。
位置: 方法参数前。
@GetMapping("/users") public List<User> getUsersByRole(@RequestParam(name = "role", defaultValue = "user") String roleName) { // 处理查询参数 role=xxx 的逻辑 }
@RequestBody
:作用: 将 HTTP 请求体的内容(通常是 JSON 或 XML)绑定到方法参数对象上。用于接收前端提交的复杂数据。
位置: 方法参数前(通常是对象类型)。
@ResponseBody
:作用: 指示方法的返回值应该直接写入 HTTP 响应体,而不是解析为视图名称。通常用在
@Controller
类中的方法上。位置: 方法上或返回值类型前。(
@RestController
已经为整个类加上了此注解,所以其方法上无需再加)。
依赖注入与Bean管理
@Component
:作用: 通用注解,标识一个类为 Spring 组件(Bean)。被扫描后,由 Spring 容器管理其生命周期和依赖注入。
位置: 类上。
特化注解(语义更明确,功能相同):
@Service
: 标识服务层组件。@Repository
: 标识数据访问层(DAO)组件。通常与 JPA/Hibernate/MyBatis 等一起使用,Spring 还会为此注解标记的 DAO 类提供额外的异常转换。@Controller
: 标识 Web 控制器组件(见上文)。@RestController
: 标识 RESTful 控制器组件(见上文)。@Configuration
: 标识配置类,其中可以定义@Bean
方法(见下文)。
@Autowired
:作用: 自动注入依赖。Spring 容器会自动查找匹配类型(或名称)的 Bean 并注入到字段、构造方法或 setter 方法中。
位置: 字段、构造方法、setter 方法或普通方法上。推荐使用构造器注入(加在构造方法上)。
@Service public class UserService { private final UserRepository userRepository; @Autowired // Spring 4.3+ 后,如果类只有一个构造方法,此注解可省略 public UserService(UserRepository userRepository) { this.userRepository = userRepository; } // ... 使用 userRepository }
@Bean
:作用: 在
@Configuration
类的方法上使用。该方法返回的对象将被注册为一个 Spring Bean,由 Spring 容器管理。常用于配置第三方库的组件或需要复杂初始化的 Bean。位置:
@Configuration
类中的方法上。@Configuration public class AppConfig { @Bean // 方法名默认为 Bean 的名称,也可用 (name="myBean") 指定 public MyService myService() { return new MyServiceImpl(); } }
@Qualifier
:作用: 当有多个相同类型的 Bean 存在时,配合
@Autowired
使用,通过指定 Bean 的名称来消除歧义,精确注入所需的 Bean。位置: 字段、方法参数上(紧跟在
@Autowired
旁边)。@Autowired @Qualifier("mainDataSource") // 指定注入名为 "mainDataSource" 的 DataSource Bean private DataSource dataSource;
@Primary
:作用: 当存在多个相同类型的 Bean 时,标记某个 Bean 为首选项(默认候选者)。这样在使用
@Autowired
按类型注入时,会优先选择带有@Primary
注解的 Bean。位置:
@Component
类或@Bean
方法上。@Configuration public class DataSourceConfig { @Bean @Primary // 标记为首选 DataSource public DataSource primaryDataSource() { ... } @Bean public DataSource secondaryDataSource() { ... } }