Spring常用注解速查
Spring常用注解速查
本文整理了Spring、Spring MVC和Spring Boot中常用的注解,方便快速查阅和使用。
虽然我认为不是那么简洁明了,但是够用了不是吗?,如果要找具体的注解用法,建议去Spring官方文档查找。
以下内容基于Spring 5.3.20、Spring MVC 5.3.20和Spring Boot 2.6.7版本。
我只是个普通的学习者,但是也是尽可能的收集齐了,在初学者阶段完全够用的。
前置依赖
要使用Spring、Spring MVC和Spring Boot中的注解,需要在项目中添加相应的依赖。以下是常用的依赖配置:
Maven依赖
如果你要找到具体版本的依赖,建议去Maven仓库查找。
1 | <!-- Spring Core --> |
Gradle依赖
1 | // Spring Core |
文档导航
我也不知道这个导航能不能在我的站点正常的运行,但是我还是弄了,因为在一般的makedown上是可以正常使用的。
- 一、Spring核心注解
- 二、Spring MVC注解
- 三、Spring Boot注解
- 四、Spring事务注解
- 五、Spring安全注解
- 六、Spring数据访问注解
- 七、Spring缓存注解
- 八、Spring部署相关注解
一、Spring核心注解
Spring的核心注解主要包括@Component
、@Service
、@Repository
和@Controller
。
他们四个的作用分别是:
@Component
:通用组件类,不属于特定层的组件。@Service
:业务逻辑层类,处理核心业务逻辑。@Repository
:数据访问层类,负责数据访问操作。@Controller
:控制层类,处理HTTP请求并返回视图。
但是我说实话,这四个的区别很小,基本上都是一样的,只是语义化不同。他们更大的用途是为了给代码划分标准结构,但是有一些细微的功能区别。
1. @Component
- 作用:标记一个类为Spring容器的组件,使其被自动扫描和管理。
- 使用场景:通用组件类,不属于特定层(如Service、Repository)的组件。
- 使用方法:直接标注在类上,无必需参数。
value
(可选):指定组件的名称,默认为类名首字母小写。
- 示例:
1
2
3
4
5
6
7
8
9
10
11// 基本使用
public class UserService {
// ...
}
// 指定组件名称
public class UserService {
// ...
}
2. @Service
- 作用:特殊的
@Component
,用于标记服务层组件,具有与@Component
相同的功能,但更具语义性。 - 使用场景:业务逻辑层类,处理核心业务逻辑。
- 使用方法:直接标注在类上,无必需参数。
value
(可选):指定服务的名称,默认为类名首字母小写。
- 示例:
1
2
3
4
5
6
7
8
9
10
11// 基本使用
public class UserServiceImpl implements UserService {
// ...
}
// 指定服务名称
public class UserServiceImpl implements UserService {
// ...
}
3. @Repository
- 作用:特殊的
@Component
,用于标记数据访问层组件,除了组件扫描外,还提供了异常转换功能。 - 使用场景:DAO层或Repository层类,负责数据访问操作。
- 使用方法:直接标注在接口或类上,无必需参数。
value
(可选):指定仓库的名称,默认为类名首字母小写。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// 基本使用(接口)
public interface UserRepository extends JpaRepository<User, Long> {
// ...
}
// 基本使用(类)
public class UserDaoImpl implements UserDao {
// ...
}
// 指定仓库名称
public interface UserRepository extends JpaRepository<User, Long> {
// ...
}
4. @Controller
- 作用:特殊的
@Component
,用于标记控制层组件,处理HTTP请求并返回视图。 - 使用场景:MVC模式中的控制器类,传统Web应用的请求处理。
- 使用方法:直接标注在类上,无必需参数。
value
(可选):指定控制器的名称,默认为类名首字母小写。
- 示例:从这里开始往下的就是功能性注解,是非常常用的注解,也是超级重要的注解。
1
2
3
4
5
6
7
8
9
10
11// 基本使用
public class UserController {
// ...
}
// 指定控制器名称
public class UserController {
// ...
}
5. @Autowired
- 作用:自动注入依赖对象,Spring会根据类型匹配最合适的Bean进行注入。
- 使用场景:需要注入其他Spring管理的Bean时,可用于字段、构造函数或setter方法。
- 使用方法:
- 标注在字段上:直接在需要注入的字段前添加注解
- 标注在构造函数上:在构造函数前添加注解,适合强制依赖
- 标注在setter方法上:在setter方法前添加注解
required
(可选):是否必须注入,默认为true,若为false且无匹配Bean则注入null
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27// 字段注入
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
// ...
}
// 构造函数注入(推荐)
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
public UserServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
// 可选注入
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
// ...
}
6. @Qualifier
- 作用:当存在多个同类型的Bean时,指定要注入的Bean名称,解决依赖注入的歧义性。
- 使用场景:与
@Autowired
配合使用,当一个接口有多个实现类时。 - 使用方法:
- 必须与
@Autowired
一起使用 value
(必需):指定要注入的Bean的名称
- 必须与
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// 基本使用
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
// ...
}
// 构造函数注入
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
public UserServiceImpl( { UserRepository userRepository)
this.userRepository = userRepository;
}
// ...
}
7. @Value
- 作用:注入配置文件中的属性值或SpEL表达式计算结果。
- 使用场景:需要读取配置文件中的值或使用SpEL表达式时。
- 使用方法:
value
(必需):配置属性键(如”${app.name}”)或SpEL表达式(如”#{systemProperties[‘user.name’]}”)
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21// 注入配置属性
public class AppConfig {
private String appName;
// 带默认值
private String appVersion;
// ...
}
// 注入SpEL表达式结果
public class SystemInfo {
private String currentUser;
private double randomNumber;
// ...
}
8. @Configuration
- 作用:标记一个类为配置类,替代XML配置文件。
- 使用场景:Spring配置类。
- 示例:
1
2
3
4
public class AppConfig {
// ...
}
9. @Bean
- 作用:在配置类中定义一个Bean,Spring会将返回的对象纳入容器管理。
- 使用场景:需要显式配置Bean时,尤其是第三方库的类或需要复杂初始化的Bean。
- 使用方法:
- 标注在配置类的方法上
name
/value
(可选):指定Bean的名称,默认为方法名initMethod
(可选):指定Bean初始化后调用的方法destroyMethod
(可选):指定Bean销毁前调用的方法autowire
(可选):指定自动装配模式
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28// 基本使用
public class AppConfig {
public UserService userService() {
return new UserServiceImpl();
}
}
// 指定Bean名称和生命周期方法
public class AppConfig {
public UserService userService() {
return new UserServiceImpl();
}
}
// 依赖其他Bean
public class AppConfig {
public UserService userService(UserRepository userRepository) {
UserServiceImpl service = new UserServiceImpl();
service.setUserRepository(userRepository);
return service;
}
}
二、Spring MVC注解
1. @RestController
- 作用:组合
@Controller
和@ResponseBody
,标记一个类为RESTful控制器,所有方法的返回值都会自动转换为JSON/XML响应体。 - 使用场景:RESTful API的控制器类,不需要返回视图的情况。
- 使用方法:直接标注在类上,无必需参数。
value
(可选):指定控制器的名称,默认为类名首字母小写。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 基本使用
public class UserRestController {
public List<User> getAllUsers() {
// ...
}
}
// 指定控制器名称
public class UserRestController {
// ...
}
2. @RequestMapping
- 作用:映射HTTP请求到控制器方法,可指定URL、HTTP方法、请求参数等条件。
- 使用场景:定义控制器方法的请求路径和HTTP方法,适用于各种HTTP请求类型。
- 使用方法:
value
/path
(可选):指定请求的URL路径,支持数组形式多个路径method
(可选):指定HTTP请求方法,如GET、POST、PUT、DELETE等params
(可选):指定请求必须包含的参数headers
(可选):指定请求必须包含的头信息consumes
(可选):指定请求体的媒体类型,如”application/json”produces
(可选):指定响应体的媒体类型
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// 基本使用
public List<User> getAllUsers() {
// ...
}
// 多个路径
public List<User> getAllUsers() {
// ...
}
// 指定参数和头信息
public List<User> getUsersByPage(int page, int size) {
// ...
}
3. @GetMapping
, @PostMapping
, @PutMapping
, @DeleteMapping
- 作用:分别对应HTTP的GET、POST、PUT、DELETE方法的快捷注解。
- 使用场景:替代
@RequestMapping
并指定HTTP方法。 - 示例:
1
2
3
4
public User getUserById( { Long id)
// ...
}
4. @PathVariable
- 作用:获取URL路径中的参数值,将路径中的占位符映射到方法参数。
- 使用场景:RESTful API中获取路径参数,如
/users/{id}
中的id
。 - 使用方法:
- 标注在方法参数上
value
/name
(可选):指定路径中占位符的名称,若参数名与占位符名一致可省略required
(可选):是否必须,默认为true
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23// 基本使用
public User getUserById( { Long id)
// ...
}
// 指定参数名
public User getUserById( { Long id)
// ...
}
// 可选参数
public User getUserById( { Long id)
// ...
}
// 多个参数
public Post getUserPost( { Long id, Long postId)
// ...
}
5. @RequestParam
- 作用:获取HTTP请求参数的值,包括查询参数和表单参数。
- 使用场景:获取查询参数或表单参数,如
/users?page=0&size=10
中的page
和size
。 - 使用方法:
- 标注在方法参数上
value
/name
(可选):指定请求参数的名称,若参数名与请求参数名一致可省略required
(可选):是否必须,默认为truedefaultValue
(可选):默认值,当参数不存在时使用
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24// 基本使用
public List<User> getUsersByPage(int page, int size) {
// ...
}
// 指定参数名和默认值
public List<User> getUsersByPage(int page,
int size) {
// ...
}
// 可选参数
public List<User> searchUsers( { String keyword)
// ...
}
// 数组参数
public List<User> getUsersByIds( { List<Long> ids)
// ...
}
6. @RequestBody
- 作用:将HTTP请求体转换为Java对象,通常用于处理JSON或XML格式的数据。
- 使用场景:处理POST、PUT等请求中的JSON或XML数据,如创建或更新资源。
- 使用方法:
- 标注在方法参数上
required
(可选):是否必须有请求体,默认为true
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// 基本使用
public User createUser( { User user)
// ...
}
// 可选请求体
public User createUser( { User user)
// ...
}
// 处理特定媒体类型
public User createUser( { User user)
// ...
}
7. @ResponseBody
- 作用:将控制器方法的返回值转换为HTTP响应体。
- 使用场景:返回JSON或XML数据。
- 示例:
1
2
3
4
5
6
7
8
public class UserController {
public User getUserById( { Long id)
// ...
}
}
三、Spring Boot注解
1. @SpringBootApplication
- 作用:组合
@Configuration
、@EnableAutoConfiguration
和@ComponentScan
三个注解,标记Spring Boot应用的主类。 - 使用场景:Spring Boot应用的入口类,通常包含main方法。
- 使用方法:
scanBasePackages
(可选):指定组件扫描的基础包路径scanBasePackageClasses
(可选):指定组件扫描的基础类exclude
(可选):排除特定的自动配置类excludeName
(可选):排除特定名称的自动配置类
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23// 基本使用
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
// 自定义扫描路径
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
// 排除特定自动配置
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2. @EnableAutoConfiguration
- 作用:启用Spring Boot的自动配置机制。
- 使用场景:通常与
@Configuration
一起使用。 - 示例:
1
2
3
4
5
public class AppConfig {
// ...
}
3. @ComponentScan
- 作用:指定Spring扫描组件的包路径。
- 使用场景:需要自定义组件扫描范围时。
- 示例:
1
2
3
4
5
public class AppConfig {
// ...
}
4. @ConfigurationProperties
- 作用:将配置文件中的属性绑定到Java对象。
- 使用场景:读取复杂的配置信息。
- 示例:
1
2
3
4
5
6
7
public class AppProperties {
private String name;
private String version;
// getters and setters
}
5. @EnableConfigurationProperties
- 作用:启用
@ConfigurationProperties
注解的类。 - 使用场景:当
@ConfigurationProperties
标注的类没有被@Component
标注时。 - 示例:
1
2
3
4
5
public class AppConfig {
// ...
}
6. @Profile
- 作用:指定Bean在特定环境下才会被创建。
- 使用场景:多环境配置。
- 示例:
1
2
3
4
5
public class DevConfig {
// ...
}
7. @Conditional
- 作用:根据条件决定是否创建Bean。
- 使用场景:需要根据特定条件动态创建Bean时。
- 示例:
1
2
3
4
5
6
7
8
public class AppConfig {
public FeatureService featureService() {
return new FeatureServiceImpl();
}
}
8. @EnableAsync
- 作用:启用Spring的异步方法执行功能。
- 使用场景:需要执行异步任务时。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
public class AsyncService {
public CompletableFuture<String> doAsyncTask() {
// 异步执行的任务
return CompletableFuture.completedFuture("任务完成");
}
}
9. @EnableScheduling
- 作用:启用Spring的任务调度功能。
- 使用场景:需要执行定时任务时。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
public class ScheduledService {
// 每天中午12点执行
public void scheduledTask() {
// 定时执行的任务
}
}
10. @SpringBootTest
- 作用:用于Spring Boot应用的测试,提供Spring Boot特性的支持。
- 使用场景:Spring Boot应用的集成测试。
- 示例:
1
2
3
4
5
6
7
8
9
10
public class ApplicationTests {
private UserService userService;
public void testUserService() {
// 测试代码
}
}
四、Spring事务注解
1. @Transactional
- 作用:标记方法或类需要在事务中执行,保证数据库操作的原子性、一致性、隔离性和持久性。
- 使用场景:需要保证数据一致性的操作,如数据库更新、插入、删除等。
- 使用方法:
value
(可选):指定事务管理器的名称propagation
(可选):指定事务传播行为,如REQUIRED、SUPPORTS、MANDATORY等isolation
(可选):指定事务隔离级别,如DEFAULT、READ_UNCOMMITTED、READ_COMMITTED等timeout
(可选):指定事务超时时间(秒)readOnly
(可选):指定事务是否为只读rollbackFor
(可选):指定触发回滚的异常类型noRollbackFor
(可选):指定不触发回滚的异常类型
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29// 基本使用
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
public void createUser(User user) {
userRepository.save(user);
// 其他数据库操作
}
}
// 自定义事务属性
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
public void createUser(User user) {
userRepository.save(user);
// 其他数据库操作
}
}
五、Spring安全注解
1. @EnableWebSecurity
- 作用:启用Spring Security的Web安全支持。
- 使用场景:Web应用的安全配置。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class SecurityConfig extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
2. @PreAuthorize
, @PostAuthorize
- 作用:方法执行前/后进行权限检查。
- 使用场景:需要细粒度权限控制的方法。
- 示例:
1
2
3
4
5
6
7
public class UserServiceImpl implements UserService {
public void deleteUser(Long id) {
// 删除用户操作
}
}
六、Spring数据访问注解
1. @Entity
, @Table
- 作用:
@Entity
标记一个类为JPA实体;@Table
指定实体对应的数据库表。 - 使用场景:JPA实体类定义。
- 示例:
1
2
3
4
5
6
7
8
9
10
public class User {
private Long id;
private String username;
private String email;
// getters and setters
}
2. @Id
, @GeneratedValue
- 作用:
@Id
标记实体的主键;@GeneratedValue
指定主键生成策略。 - 使用场景:定义实体主键。
- 示例:
1
2
3
private Long id;
七、Spring缓存注解
1. @EnableCaching
- 作用:启用Spring的缓存机制。
- 使用场景:需要使用缓存提升性能时。
- 示例:
1
2
3
4
5
6
7
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2. @Cacheable
, @CacheEvict
, @CachePut
- 作用:
@Cacheable
:方法结果存入缓存@CacheEvict
:清除缓存@CachePut
:更新缓存
- 使用场景:缓存频繁访问的数据。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class UserServiceImpl implements UserService {
public User getUserById(Long id) {
// 从数据库获取用户
return userRepository.findById(id).orElse(null);
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
八、Spring部署相关注解
1. @ConditionalOnClass
, @ConditionalOnMissingClass
- 作用:根据类是否存在决定是否创建Bean。
- 使用场景:根据依赖库动态配置Bean。
- 示例:
1
2
3
4
5
6
7
8
public class AppConfig {
public FeatureService featureService() {
return new FeatureServiceImpl();
}
}
2. @ConditionalOnWebApplication
, @ConditionalOnNotWebApplication
- 作用:根据是否是Web应用决定是否创建Bean。
- 使用场景:区分Web和非Web环境的配置。
- 示例:
1
2
3
4
5
6
7
8
public class AppConfig {
public WebService webService() {
return new WebServiceImpl();
}
}
以上是Spring生态系统中常用的注解,涵盖了核心功能、MVC、Boot、事务、安全、数据访问、缓存和部署等各个方面。每个注解都提供了详细的作用说明、使用场景和完整的代码示例,帮助您更好地理解和使用Spring框架。后续会持续更新和补充更多实用注解。,我觉得是不用再补充了QAQ,看官方文档去吧。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XHAYANEの小屋!