一、组件注解(标记类)
| 注解 | 作用 | 简单解释 |
|---|
@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
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}")
public User getOne(@PathVariable Long id) {
return userService.findById(id);
}
@GetMapping
public List<User> list(@RequestParam int page) {
return userService.findAll(page);
}
@PostMapping
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
private UserRepository userRepository;
@Value("${app.name}")
private String appName;
@Resource(name = "specialDb")
private DataSource dataSource;
@Autowired
@Qualifier("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
public DataSource dataSource() {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
return ds;
}
@Bean(name = "customCache")
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")
public DataSource devDataSource() {
return new H2DataSource();
}
@Bean
@Profile("prod")
public DataSource prodDataSource() {
return new MySQLDataSource();
}
@Bean
@ConditionalOnProperty(name = "cache.enabled", havingValue = "true")
public Cache cache() {
return new RedisCache();
}
}
九、启动类注解
| 注解 | 作用 | 简单解释 |
|---|
@SpringBootApplication | Spring Boot 启动注解 | 组合注解,包含 @Configuration + @EnableAutoConfiguration + @ComponentScan |
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
十、测试注解
| 注解 | 作用 | 简单解释 |
|---|
@SpringBootTest | Spring Boot 测试注解 | 启动完整的 Spring 上下文环境进行测试 |
@Test | 标记测试方法 | JUnit 注解,标识一个方法为测试用例 |
@MockBean | 创建 Mock 对象 | 模拟一个 Bean 的行为,不实际调用真实对象 |
@SpringBootTest
public class UserServiceTest {
@MockBean
private UserRepository userRepository;
@Autowired
private 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 |
所有评论(0)