Springboot常用注解整理

通用

1.@Autowired

作用:自动注入 Spring 容器中的 bean。

用途:可以用于构造函数、字段或 setter 方法,简化依赖注入的过程。

1
2
@Autowired
private UserRepository userRepository;

2. @Component

作用:将类标识为 Spring 组件,使其可以被 Spring 管理。

用途:用于任何 Spring 管理的类,如果不适用更特定的注解(如 @Service@Controller@Repository),可以使用这个注解。

是一个类级别的注解,通常用于标记一个类作为 Spring 管理的组件。Spring 会自动扫描带有 @Component 注解的类,并将其实例化为 bean。

更常用于自动扫描的组件,适合用于标记服务层、控制器层、数据访问层等。可以与其他注解(如 @Service@Controller@Repository)结合使用,以便在语义上更清晰。

1
2
3
4
@Component
public class MyComponent {
// 业务逻辑
}

3.@Value

作用:用于注入配置属性。

用途:从 application.propertiesapplication.yml 中获取值并注入到字段中。

1
2
@Value("${app.name}")
private String appName;

4.@Configuration

作用:标识一个类为配置类,通常用于定义 Spring bean。

用途:替代 XML 配置,使用 Java 代码来配置 bean。

1
2
3
4
5
6
7
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
}

5.@Bean

作用:用于定义一个 bean 方法。

用途:在 @Configuration 类中使用,返回的对象将被 Spring 容器管理。

是一个方法级别的注解,通常用于在配置类中定义一个 bean。返回值将被注册为 Spring 的 bean。

更常用于手动定义 bean,适合在需要更复杂配置或控制 bean 实例化过程时使用。可以在 Java 配置类中使用,也可以通过工厂方法创建 bean。

1
2
3
4
@Bean
public MyService myService() {
return new MyService();
}

6.@Scope

作用:指定 bean 的作用域。

用途:可以设置为单例(singleton)、原型(prototype)、请求(request)、会话(session)等。

1
2
3
4
5
@Scope("prototype")
@Component
public class MyPrototypeBean {
// 逻辑
}

7.@PostConstruct

作用:在 bean 初始化完成后执行的方法。

用途:用于进行一些初始化操作。

1
2
3
4
@PostConstruct
public void init() {
// 初始化逻辑
}

8.@PreDestroy

作用:在 bean 销毁之前执行的方法。

用途:用于释放资源或进行清理操作。

1
2
3
4
@PreDestroy
public void cleanup() {
// 清理逻辑
}

Controller层

1. @Controller

作用:标识一个类为控制器,用于处理请求。

用途:通常与视图(如 JSP、Thymeleaf)结合使用。

通常返回视图名(如 JSP 页面),需要通过视图解析器来渲染视图。如果需要返回 JSON 或其他数据格式,必须在每个处理方法上添加 @ResponseBody

1
2
3
4
5
@Controller
public class MyController {
// 方法定义
}

2. @RestController

作用:是 @Controller 的组合注解,默认返回 JSON 或 XML 格式的数据。

用途:适用于 RESTful Web 服务。

默认将方法的返回值直接作为 HTTP 响应体返回,通常用于返回 JSON 或 XML 数据。所有方法返回的对象会自动被转换为 JSON 格式(如果使用了 Jackson 等库)。

1
2
3
4
@RestController
public class MyRestController {
// 方法定义
}

3.@RequestMapping

作用:用于将 HTTP 请求映射到处理方法。

用途:可以在类级别或方法级别使用,支持设置请求类型(GET、POST 等)、路径、参数等。

1
2
3
4
5
6
7
@RequestMapping("/api")
public class MyApiController {
@RequestMapping("/hello")
public String hello() {
return "Hello, World!";
}
}

4. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping

作用:是 @RequestMapping 的快捷方式,分别用于处理 GET、POST、PUT 和 DELETE 请求。

用途:使代码更简洁明了。

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
public class MyController {
@GetMapping("/hello")
public String getHello() {
return "Hello, GET!";
}

@PostMapping("/hello")
public String postHello(@RequestBody String name) {
return "Hello, " + name + "!";
}
}

5.@PathVariable

作用:用于从 URL 模板中提取变量。

用途:通常用于 RESTful API 中,允许将 URL 中的动态部分映射到方法参数。

1
2
3
4
@GetMapping("/user/{id}")
public User getUserById(@PathVariable String id) {
return userService.findById(id);
}

6.@RequestParam

作用:用于提取请求参数。

用途:可以从查询字符串或表单数据中获取参数。

1
2
3
4
@GetMapping("/greet")
public String greet(@RequestParam String name) {
return "Hello, " + name + "!";
}

7.@RequestBody

作用:用于将请求体中的 JSON 或 XML 数据转换为 Java 对象。

用途:在处理 POST 和 PUT 请求时,常用于接收客户端发送的数据。

1
2
3
4
@PostMapping("/user")
public User createUser(@RequestBody User user) {
return userService.save(user);
}

8.@ResponseBody

作用:指示方法的返回值应直接写入 HTTP 响应体。

用途:通常与 @Controller 结合使用,以便返回 JSON 或其他数据格式。

1
2
3
4
5
6
7
8
@Controller
public class MyController {
@ResponseBody
@GetMapping("/data")
public Data getData() {
return new Data("example");
}
}

9.@CrossOrigin

作用:用于处理跨源请求。

用途:允许特定来源的客户端访问控制器的方法,适用于 RESTful API。

1
2
3
4
5
6
7
8
@RestController
@CrossOrigin(origins = "http://example.com")
public class MyController {
@GetMapping("/data")
public Data getData() {
return new Data("example");
}
}

10. @Valid 和 @Validated

作用:用于启用方法参数的验证。

用途:常与 @RequestBody 一起使用,确保传入的数据符合要求。

1
2
3
4
@PostMapping("/user")
public User createUser(@Valid @RequestBody User user) {
return userService.save(user);
}

Service层

1.@Service

作用:标识一个类为服务组件,是 Spring 的标记注解之一。

用途:用于标识业务逻辑层的组件,Spring 会自动扫描并管理这些类。

1
2
3
4
5
6
import org.springframework.stereotype.Service;

@Service
public class UserService {
// 业务逻辑方法
}

2.@Transactional

作用:用于标记一个方法或类为事务性,确保在执行方法时的一致性。

用途:在处理数据库操作时,通常会将这个注解应用于 Service 层,以确保操作的原子性和一致性。

1
2
3
4
5
6
7
8
9
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {
@Transactional
public void createUser(User user) {
// 业务逻辑
}
}

3.@Cacheable, @CachePut, @CacheEvict

作用:用于缓存管理。

  • @Cacheable:用于标记方法的结果应被缓存。
  • @CachePut:用于更新缓存。
  • @CacheEvict:用于清除缓存。

用途:通过缓存提高系统性能,减少数据库查询。

1
2
3
4
5
6
7
8
9
10
11
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class UserService {
@Cacheable("users")
public User getUserById(String id) {
return userRepository.findById(id);
}
}

4.@Profile

作用:用于根据当前环境激活特定的 Bean。

用途:可以在开发、测试和生产环境中使用不同的实现类。

1
2
3
4
5
6
7
8
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;

@Service
@Profile("dev")
public class DevUserService implements UserService {
// 开发环境中的实现
}

Mapper层

1.@Repository

作用:标识一个类为数据访问层组件。

用途:通常与 Spring Data JPA 和 MyBatis 一起使用,用于表示该类是用于数据操作的组件。

属于 Spring 框架,用于标识一个类为数据访问层的组件。主要用于 Spring 的依赖注入和 AOP(面向切面编程)。

用于标记数据访问层的类,通常与 Spring Data JPA 或其他数据访问技术一起使用。可以通过 @Autowired 注入到服务层,支持 Spring 的事务管理。

1
2
3
4
5
6
7
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper {
User findById(Long id);
}

2.@Mapper

作用:标识一个接口为 MyBatis 的 Mapper 接口。

用途:将该接口与 XML 映射文件或注解 SQL 语句关联,允许 MyBatis 自动扫描并生成实现类。

属于 MyBatis 框架,用于标识一个接口为 MyBatis 的 Mapper 接口。主要用于将 SQL 操作与 Java 方法进行映射。

用于标识 MyBatis 的 Mapper 接口,使得 MyBatis 能够自动生成实现类。可以直接定义 SQL 操作,并与数据库表进行映射。

1
2
3
4
5
6
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
User findById(Long id);
}

3.@Select, @Insert, @Update, @Delete

作用:这些注解用于定义 SQL 操作。

用途:可以直接在 Mapper 接口中编写 SQL 语句,而不需要 XML 映射文件。

  • @Select:执行 SELECT 查询。

    1
    2
    @Select("SELECT * FROM users WHERE id = #{id}")
    User findById(Long id);
  • @Insert:执行 INSERT 操作。

    1
    2
    @Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")
    void insertUser(User user);
  • @Update:执行 UPDATE 操作。

    1
    2
    @Update("UPDATE users SET name = #{name} WHERE id = #{id}")
    void updateUser(User user);
  • @Delete:执行 DELETE 操作。

    1
    2
    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteUser(Long id);

4.@Param

作用:用于在方法参数中指定参数名。

用途:在使用注解 SQL 语句时,可以通过这个注解来明确指定参数名,尤其在多个参数时。

1
2
@Select("SELECT * FROM users WHERE name = #{name} AND age = #{age}")
User findByNameAndAge(@Param("name") String name, @Param("age") int age);

pojo层

1.@ConfigurationProperties(prefix = “xxx”)

作用:用于批量加载和绑定配置文件中的属性(如 application.ymlapplication.properties)到一个 Java 类的字段中。

使用方式:

  1. 在配置类上标注 @ConfigurationProperties,并指定一个前缀(prefix)。
  2. 配合 @EnableConfigurationProperties 或使用 @SpringBootApplication(隐含支持)。
  3. 自动将配置文件中以指定前缀开头的属性映射到类中的字段。
  • 示例:
1
2
3
4
5
6
7
8
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private String name;
private int port;

// Getters and Setters
}

配置文件

1
2
app.name=MyApp
app.port=8080

2.@Value注解

作用:直接注入单个配置属性的值到字段中。

使用方式:

​ 在类中的字段或方法参数上使用 @Value 注解,并通过 ${} 引用配置文件中的属性。

示例:

1
2
3
4
5
java复制代码@Value("${app.name}")
private String appName;

@Value("${app.port:8080}")
private int port; // 如果未配置,则默认值为 8080

配置文件:

1
2
3
4
5
properties


复制代码
app.name=MyApp