Spring Boot
提供了大量注解来简化开发,以下是按功能分类的核心注解列表:
1、核心启动注解
1.1@SpringBootApplication
- 组合注解,包含:
-
@Configuration
:标记配置类 -
@EnableAutoConfiguration
:启用自动配置 -
@ComponentScan
:组件扫描
-
示例:
@Configuration
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
2、Web 开发注解
2.1 MVC
相关
-
@RestController
组合@Controller
+@ResponseBody
示例:
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello World";
}
}
2.2 请求映射注解
-
@RequestMapping
:通用请求映射 -
@GetMapping
:GET
请求 -
@PostMapping
:POST
请求 -
@PutMapping
:PUT
请求 -
@DeleteMapping
:DELETE
请求 -
@PatchMapping
:PATCH
请求
2.3 参数处理
-
@PathVariable
:获取路径参数
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) { ... }
-
@RequestParam
:获取查询参数
@GetMapping("/search")
public List<User> search(@RequestParam String keyword) { ... }
-
@RequestBody
:获取请求体(JSON/XML
)
@PostMapping("/users")
public User createUser(@RequestBody User user) { ... }
-
@RequestHeader
:获取请求头 -
@CookieValue
:获取Cookie
值
2.4 响应处理
-
@ResponseStatus
:自定义HTTP状态码
@ResponseStatus(HttpStatus.CREATED)
public User createUser(...) { ... }
-
@ResponseBody
:直接返回数据(非视图)
3 、依赖注入相关
3.1 组件声明
-
@Component
:通用组件 -
@Service
:服务层组件 -
@Repository
:数据访问层组件 -
@Controller
:控制器组件
3.2 依赖注入
-
@Autowired
:自动注入(推荐构造函数注入)
让Spring
容器在创建当前对象的同时将当前类需要依赖的对象通过属性设置进来,这个过程也成为"依赖,注入"
这里最好定义的是接口类型,以便日后可以随时更换子类为C类,D类..等等(B,C,D...这些类都实现类该接口).
@Service
public class UserService {
private final UserRepository userRepo;
@Autowired // Spring 4.3+ 可省略
public UserService(UserRepository userRepo) {
this.userRepo = userRepo;
}
}
-
@Resource
:JSR-250标准注入(依赖注入)
@Resource(name="类名")
通过向@Resource
注解中传入name
参数,参数值为要加载的类的类名来让Spring
容器完成依赖注入
需要注意:这里虽然是类名,但是[首字母要小写]
要求属性的名字与类名一致
@Resource
:要求属性的名字与类名一致
@Resource(name="shirt") 注入Shirt这个类
private Clothes cloth;
@Resource
private Clothes shirt; 注入Shirt这个类
-
@Qualifier("summer")
指定需要引入的组件
@Component("summer")
public class Shirt implements Clothes{
public void wear(){
System.out.println("穿上T恤");
}
}
@Autowired
@Qualifier("summer")
private Clothes clothes;
4、配置相关注解
4.1 配置属性
-
@Value
:注入简单值
@Value("${app.name}")
private String appName;
-
@ConfigurationProperties
:批量绑定属性
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private int version;
// getters/setters
}
4.2 配置类
-
@Configuration
:声明配置类 -
@PropertySource("classpath:demo/config.properties")
:
这里classpath
:是用于告知spring
容器要从"类路径"开始,根据指定的配置文件路径寻找到 -
@Bean
:声明Bean
@Configuration
@PropertySource("classpath:配置文件路径")
public class AppConfig {
@Value("${demo2.student.name}")
private String name;
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
5、数据访问相关
5.1 JPA 注解
-
@Entity
:实体类 -
@Table
:指定表名 -
@Id
:主键 -
@GeneratedValue
:主键生成策略 -
@Column
:字段映射 -
@OneToMany/@ManyToOne
:关联关系
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String username;
@OneToMany(mappedBy = "user")
private List<Order> orders;
}
5.2 事务管理
-
@Transactional
:声明事务
@Service
public class UserService {
@Transactional
public void updateUser(User user) {
// 数据库操作
}
}
6、测试相关
6.1 测试注解
-
@SpringBootTest
:集成测试 -
@WebMvcTest
:控制器测试 -
@DataJpaTest
:JPA
测试 -
@MockBean
:模拟Bean
@SpringBootTest
class UserServiceTest {
@Autowired
private UserService userService;
@MockBean
private UserRepository userRepository;
@Test
void testGetUser() {
// 测试代码
}
}
7、定时任务
7.1 定时任务
-
@EnableScheduling
:启用定时任务 -
@Scheduled
:定义执行计划
@Component
public class MyTask {
@Scheduled(cron = "0 0/5 * * * ?")
public void doTask() {
// 每5分钟执行
}
}
8、AOP 相关
8.1 AOP 注解
-
@Aspect
:声明切面 -
@Before
:前置通知 -
@After
:后置通知 -
@Around
:环绕通知
@Aspect
@Component
public class LogAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
// 记录日志
}
}
9、缓存相关
9.1 缓存注解
-
@EnableCaching
:启用缓存 -
@Cacheable
:缓存结果 -
@CacheEvict
:清除缓存 -
@CachePut
:更新缓存
@Service
public class ProductService {
@Cacheable("products")
public Product getProductById(Long id) {
// 数据库查询
}
}
10、Spring Security
10.1 安全注解
-
@EnableWebSecurity
:启用安全配置 -
@PreAuthorize
:方法级权限控制
@PreAuthorize("hasRole('ADMIN')")
public void deleteUser(Long id) { ... }
@Secured:角色验证