一、组件注解(标记类)

注解作用简单解释
@Component标记一个类为 Spring 管理的组件告诉 Spring:这个类你要管起来
@Service标记业务逻辑层组件@Component 更具体,表示这是处理业务的地方
@Repository标记数据访问层组件表示这是和数据库打交道的类,Spring 会自动转换数据库异常
@Controller标记控制器组件(MVC中的C)表示这是处理 Web 请求的类,返回视图页面
@RestController标记 REST 风格控制器@Controller + @ResponseBody,返回数据而不是页面
@Component  // 通用组件
public class EmailHelper { }

@Service     // 业务层
public class UserService { }

@Repository  // 数据层
public class UserRepository { }

@Controller  // 控制器(返回页面)
public class ViewController { }

@RestController  // REST控制器(返回JSON)
public class ApiController { }

二、Web注解(处理请求)

注解作用简单解释
@RequestMapping映射 HTTP 请求路径当有人访问这个路径,这个方法就干活
@GetMapping映射 GET 请求专门处理查询请求
@PostMapping映射 POST 请求专门处理新增请求
@PutMapping映射 PUT 请求专门处理更新请求
@DeleteMapping映射 DELETE 请求专门处理删除请求
@PatchMapping映射 PATCH 请求专门处理部分更新
@PathVariable从 URL 路径取参数/users/{id} 里取出 id
@RequestParam从请求参数取数据?name=xxx 里取出 name
@RequestBody从请求体取 JSON 数据把前端发的 JSON 转成 Java 对象
@ResponseBody返回 JSON 数据把 Java 对象转成 JSON 发给前端
@RequestHeader从请求头取数据token、浏览器信息等
@CookieValue从 Cookie 取数据sessionId
@CrossOrigin允许跨域请求允许其他网站调用你的接口
@RestController
@RequestMapping("/api/users")  // 基础路径
public class UserController {
    
    @GetMapping("/{id}")  // GET /api/users/123
    public User getOne(@PathVariable Long id) {
        return userService.findById(id);
    }
    
    @GetMapping  // GET /api/users?page=1
    public List<User> list(@RequestParam int page) {
        return userService.findAll(page);
    }
    
    @PostMapping  // POST /api/users 带着JSON
    public User create(@RequestBody User user) {
        return userService.save(user);
    }
    
    @GetMapping("/header")
    public String getHeader(@RequestHeader("Authorization") String token) {
        return "你的token是:" + token;
    }
}

三、依赖注入注解(装配对象)

注解作用简单解释
@Autowired按类型自动注入Spring 自动把对象给你
@Resource按名称自动注入指定名字拿对象
@Qualifier指定注入哪个 Bean当有多个同类型时,指定用哪个
@Value注入配置文件的值application.properties 里取值
@Service
public class UserService {
    
    @Autowired  // Spring 自动把 UserRepository 给我
    private UserRepository userRepository;
    
    @Value("${app.name}")  // 从配置文件取 app.name 的值
    private String appName;
    
    @Resource(name = "specialDb")  // 指定名字拿
    private DataSource dataSource;
    
    @Autowired
    @Qualifier("primaryCache")  // 有多个缓存实现时,指定用 primaryCache
    private Cache cache;
}

四、生命周期注解(初始化/销毁)

注解作用简单解释
@PostConstruct对象创建后执行员工入职培训
@PreDestroy对象销毁前执行员工离职交接
@Component
public class DatabaseManager {
    
    @PostConstruct
    public void init() {
        System.out.println("连接数据库...");
        // 打开连接、预热缓存等
    }
    
    public void query() {
        System.out.println("查询数据...");
    }
    
    @PreDestroy
    public void cleanup() {
        System.out.println("关闭数据库连接...");
        // 释放资源
    }
}

五、配置类注解(Java配置)

注解作用简单解释
@Configuration标记这是一个配置类相当于以前的 XML 配置文件
@Bean声明一个 Bean告诉 Spring:这个方法返回的对象要管起来
@PropertySource导入配置文件加载指定的 properties 文件
@Import导入其他配置类合并多个配置类
@Configuration  // 这是一个配置类
@PropertySource("app.properties")  // 加载配置文件
public class AppConfig {
    
    @Bean  // 这个方法的返回值交给 Spring 管理
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        return ds;
    }
    
    @Bean(name = "customCache")  // 指定 Bean 的名字
    public Cache cache() {
        return new RedisCache();
    }
}

六、事务注解

注解作用简单解释
@Transactional声明事务这个方法里的数据库操作,要么全成功,要么全失败
@EnableTransactionManagement开启事务管理告诉 Spring 启用事务功能
@Service
public class OrderService {
    
    @Transactional  // 转账要么都成功,要么都失败
    public void transferMoney(Long fromId, Long toId, double amount) {
        accountDao.reduce(fromId, amount);  // 扣钱
        accountDao.add(toId, amount);       // 加钱
        // 如果中间出错,前面的扣钱会自动回滚
    }
}

七、AOP注解(面向切面)

注解作用简单解释
@Aspect标记这是一个切面类告诉 Spring:这个类里装着要插入的代码
@Before方法执行前执行在干活之前先做点啥
@After方法执行后执行干完活后做点啥
@Around环绕通知干活前后都做点啥
@Pointcut定义切点指定哪些方法需要被拦截
@Aspect
@Component
public class LoggingAspect {
    
    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore() {
        System.out.println("方法开始执行了...");
    }
    
    @Around("@annotation(Loggable)")
    public Object aroundMethod(ProceedingJoinPoint pjp) {
        System.out.println("执行前");
        Object result = pjp.proceed();  // 执行原方法
        System.out.println("执行后");
        return result;
    }
}

八、条件注解(按条件生效)

注解作用简单解释
@Profile按环境生效只在 dev 环境才创建这个 Bean
@Conditional按条件生效满足条件才创建这个 Bean
@ConditionalOnProperty按配置生效配置项存在才创建
@Configuration
@Configuration
public class DatabaseConfig {
    
    @Bean
    @Profile("dev")  // 只在开发环境用 H2 数据库
    public DataSource devDataSource() {
        return new H2DataSource();
    }
    
    @Bean
    @Profile("prod")  // 只在生产环境用 MySQL
    public DataSource prodDataSource() {
        return new MySQLDataSource();
    }
    
    @Bean
    @ConditionalOnProperty(name = "cache.enabled", havingValue = "true")
    public Cache cache() {
        return new RedisCache();  // 只有配置了 cache.enabled=true 才创建
    }
}

九、启动类注解

注解作用简单解释
@SpringBootApplicationSpring Boot 启动注解组合注解,包含 @Configuration + @EnableAutoConfiguration + @ComponentScan
@SpringBootApplication  // 组合注解,一键启动 Spring Boot 应用
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

十、测试注解

注解作用简单解释
@SpringBootTestSpring Boot 测试注解启动完整的 Spring 上下文环境进行测试
@Test标记测试方法JUnit 注解,标识一个方法为测试用例
@MockBean创建 Mock 对象模拟一个 Bean 的行为,不实际调用真实对象
@SpringBootTest
public class UserServiceTest {
    
    @MockBean
    private UserRepository userRepository;  // 模拟 UserRepository 的行为
    
    @Autowired
    private UserService userService;  // 注入真实的 UserService
    
    @Test
    public void testFindUser() {
        // 测试逻辑代码
    }
}

速查表

分类常用注解
组件注解@Component, @Service, @Repository, @RestController
请求映射@GetMapping, @PostMapping, @RequestMapping
参数绑定@PathVariable, @RequestParam, @RequestBody
依赖注入@Autowired, @Resource, @Value
生命周期@PostConstruct, @PreDestroy
配置类@Configuration, @Bean
事务@Transactional
启动类@SpringBootApplication
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐