SpringBoot---个人学习笔记(3)(注解总结)

注解太多,容易混淆。在有了一定Spring基础后学习SpringBoot,对Spring Boot的自动配置和约定优于配置的理念还没完全掌握。

将注解分门别类,比如核心配置、依赖注入、Web开发、数据访问、条件注解等,每个类别下列出常用注解,解释作用、用法、示例,并有实际代码。

Spring Boot核心注解大全,按功能模块分类,每个注解都配有使用场景和代码示例。

一、核心配置注解

1. 启动类注解

注解 作用 示例代码
@SpringBootApplication 启动类核心注解(包含@Configuration+@ComponentScan+@EnableAutoConfiguration @SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}

2. 配置类注解

注解 作用 示例代码
@Configuration 声明该类为配置类(替代XML配置)

@Configuration

public class AppConfig { @Bean public DataSource dataSource() { return new HikariDataSource(); }}

@Bean 将方法返回对象注册为Bean 见上例
@Import 导入其他配置类

@Configuration

@Import({DatabaseConfig.class, SecurityConfig.class})public class MainConfig {}

@PropertySource 加载外部配置文件

@Configuration

@PropertySource("classpath:custom.properties")

public class CustomConfig {}


二、依赖注入相关

注解 作用 示例代码
@Autowired 自动注入Bean(按类型)

@Service

public class UserService {

@Autowired

private UserRepository userRepo;}

@Qualifier 指定具体Bean名称(解决歧义)

@Autowired

@Qualifier("mysqlDataSource")

private DataSource dataSource;

@Primary 标注优先注入的Bean

@Bean

@Primary

public DataSource h2DataSource() { ... }

@Value 注入配置文件中的值 java@Value("${server.port}")private int port;

三、Web开发核心注解

1. 控制器相关

注解 作用 示例代码
@RestController REST风格控制器(等效@Controller+@ResponseBody)

@RestController

@RequestMapping("/api")

public class UserController { @GetMapping("/users") public List getUsers() { ... }}

@RequestMapping 映射请求路径 @RequestMapping(value = "/users", method = RequestMethod.GET)
@GetMapping 简化GET请求映射

@GetMapping("/{id}")

public User getUser(@PathVariable Long id) { ... }

@PostMapping 简化POST请求映射

@PostMapping

public User createUser(@RequestBody User user) { ... }

2. 参数处理

注解 作用 示例代码
@PathVariable 获取URL路径参数

@GetMapping("/users/{id}")

public User getUser(@PathVariable Long id) { ... }

@RequestParam 获取URL查询参数

@GetMapping("/search")

public List search(@RequestParam String keyword) { ... }

@RequestBody 接收JSON格式请求体

@PostMapping

public User create(@RequestBody User user) { ... }

@RequestHeader 获取请求头信息

@GetMapping

public void check(@RequestHeader("User-Agent") String userAgent) { ... }


四、数据访问相关

1. JPA注解

注解 作用 示例代码
@Entity 声明JPA实体类

@Entity

@Table(name = "tbl_user")

public class User { @Id @GeneratedValue private Long id;}

@Repository 标注数据访问层组件

@Repository

public interface UserRepository extends JpaRepository {}

@Transactional 声明事务管理

@Service

@Transactional

public class UserService { public void updateUser(User user) { ... }}

2. MyBatis整合

注解 作用 示例代码
@Mapper 标识MyBatis的Mapper接口

@Mapper

public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User findById(Long id);}

@MapperScan 指定Mapper接口扫描路径

@SpringBootApplication

@MapperScan("com.example.mapper")

public class Application { ... }


五、条件装配注解

注解 作用 示例代码
@ConditionalOnClass 类路径存在指定类时生效

@Configuration

@ConditionalOnClass(DataSource.class)

public class DataSourceAutoConfiguration { ... }

@ConditionalOnMissingBean 容器中不存在指定Bean时生效

@Bean

@ConditionalOnMissingBean

public DataSource defaultDataSource() { ... }

@ConditionalOnProperty 配置文件存在指定属性时生效

@Configuration

@ConditionalOnProperty(name = "app.feature.enabled", havingValue = "true")

public class FeatureConfig { ... }


六、测试相关

注解 作用 示例代码
@SpringBootTest 启动完整Spring上下文进行测试

@SpringBootTest

class ApplicationTests { @Autowired private UserService userService;}

@WebMvcTest 仅测试Web层(不加载完整上下文)

@WebMvcTest(UserController.class)

class UserControllerTest { @Autowired private MockMvc mockMvc;}

@DataJpaTest 仅测试JPA组件

@DataJpaTest

class UserRepositoryTest { @Autowired private TestEntityManager entityManager;}


七、最佳实践技巧

1. 注解组合使用

// 统一响应格式
@RestControllerAdvice
public class GlobalExceptionHandler {

    // 处理所有Controller抛出的异常
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public Result handleException(Exception e) {
        return Result.error(e.getMessage());
    }
}

2. 自定义注解

// 自定义权限校验注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) 
@PreAuthorize("hasRole('ADMIN')") // 复用Spring Security的权限校验 
public @interface AdminOnly {}

高频问题解答

Q1:@Component、@Service、@Repository有什么区别?

  • @Component:通用组件标识

  • @Service:业务逻辑层组件(语义化标注)

  • @Repository:数据访问层组件(会转换数据库异常)

Q2:@Autowired和@Resource的区别?

  • @Autowired:按类型注入,必须存在对应Bean

  • @Resource:按名称注入(可指定name属性)

Q3:如何控制Bean的加载顺序?

// 方法一:使用
@DependsOn 
@Configuration 
@DependsOn("databaseInitializer") 
public class ServiceConfig { ... } 
// 方法二:实现PriorityOrdered接口 
@Component 
public class HighPriorityBean implements PriorityOrdered { 
        @Override 
        public int getOrder() { 
                    return Ordered.HIGHEST_PRECEDENCE; 
               } 
        }

✅ 自测清单

完成学习后请检查:

  1. 能否正确区分@RestController@Controller

  2. 是否掌握@Transactional的事务传播配置?

  3. 能否写出一个带参数校验的完整Controller?

  4. 是否理解@ConditionalOnProperty的使用场景?

更多注解参照:Spring注解驱动开发【1-26集】

你可能感兴趣的:(spring,boot,学习,笔记)