Spring Boot 提供了大量注解用于简化配置和开发,以下是核心常用注解分类及实战用法。
一、Bean 相关注解
1、@Component
- 作用:标识普通组件,被 Spring 容器自动扫描注册为 Bean。
- 场景:通用层(工具类、非 MVC 组件)。
@Component
public class MyUtils {
public void helperMethod() { /* ... */ }
}
2、@Controller & @RestController
- @Controller:标识 MVC 控制器,返回视图(需配合
@ResponseBody
返回数据)。
@Controller
public class ViewController {
@GetMapping("/page")
public String showPage(Model model) {
model.addAttribute("data", "Hello");
return "index"; // 返回视图名
}
}
- @RestController:组合
@Controller
和@ResponseBody
,直接返回 JSON/XML。
@RestController
public class ApiController {
@GetMapping("/api/data")
public User getUser() {
return new User("Alice", 28); // 自动序列化为 JSON
}
}
3、@Service & @Repository
- @Service:标识服务层组件,聚焦业务逻辑。
@Service
public class OrderService {
public void processOrder() { /* 业务逻辑 */ }
}
- @Repository:标识持久层组件,常配合 MyBatis 等框架。
@Repository
public interface UserDao {
@Select("SELECT * FROM user WHERE id=#{id}")
User findById(Long id);
}
4、@Configuration & @Bean
- @Configuration:标识配置类,替代传统 XML 配置。
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource(); // 配置数据源 Bean
}
}
- @Bean:在配置类中定义 Bean,手动控制实例化逻辑。
二、依赖注入注解
1、@Autowired
- 作用:按类型自动注入 Bean,Spring 核心注解。
@RestController
public class UserController {
@Autowired
private UserService userService; // 注入服务层 Bean
}
2、@Resource(JDK 提供)
- 作用:默认按名称注入,可通过
name
属性指定 Bean 名称。
@RestController
public class UserController {
@Resource(name = "userService")
private UserService userService; // 按名称注入
}
3、@Qualifier
- 作用:与
@Autowired
配合,解决同类型 Bean 注入歧义。
@Service
public class UserService { /* ... */ }
@Service("adminService")
public class AdminService implements UserService { /* ... */ }
@RestController
public class Controller {
@Autowired
@Qualifier("adminService")
private UserService service; // 指定注入 adminService
}
三、Web 开发注解
1、请求映射
- @RequestMapping:通用请求映射,支持多种请求方法。
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public User getById(@PathVariable Long id) { /* ... */ }
}
- @GetMapping/@PostMapping:专用于 GET/POST 请求,简化写法。
@GetMapping("/list")
public List list() { /* ... */ }
2、参数绑定
- @RequestParam:获取查询参数(如
?name=Alice
)。
@GetMapping("/search")
public String search(@RequestParam String keyword, @RequestParam int page = 1) { /* ... */ }
- @PathVariable:获取 URL 路径参数(如
/user/{id}
)。
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) { /* ... */ }
- @RequestBody:解析请求体 JSON 数据为对象。
@PostMapping("/create")
public void create(@RequestBody User user) { /* 接收 JSON 数据 */ }
四、配置与属性注入
1、@Value
作用:从配置文件(如 application.properties
)读取单个属性。
@Component
public class AppConfig {
@Value("${server.port}")
private int port; // 注入端口号
}
2、@ConfigurationProperties
作用:批量绑定配置属性到实体类,支持复杂结构。
# application.yml
my:
app:
name: "SpringBootDemo"
env: dev
@Component
@ConfigurationProperties(prefix = "my.app")
public class AppProperties {
private String name;
private String env;
// getters and setters
}
五、启动与配置类注解
1、@SpringBootApplication
作用:标注启动类,组合以下 3 个核心注解:
@Configuration
:声明配置类。@EnableAutoConfiguration
:启用自动配置(如 Tomcat、Spring MVC 等)。@ComponentScan
:自动扫描主类所在包及其子包的组件。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
2、@EnableAutoConfiguration
- 作用:手动启用自动配置,可排除特定配置。
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class AppConfig { /* 排除数据源自动配置 */ }
六、其他关键注解
1、@Transactional
- 作用:声明数据库事务,支持传播行为、隔离级别等配置。
@Service
public class OrderService {
@Transactional(rollbackFor = Exception.class)
public void createOrder(Order order) {
// 数据库操作,异常时自动回滚
}
}
2、@Scheduled
- 作用:实现定时任务,支持 cron 表达式。
@Component
public class ScheduledTask {
@Scheduled(cron = "0 0 0 * * MON-FRI") // 每周一到周五零点执行
public void cleanLogs() {
// 定时清理日志任务
}
}
3、@Scope
作用:指定 Bean 作用域(默认单例)。
@Bean
@Scope("prototype") // 每次注入创建新实例
public MyBean prototypeBean() {
return new MyBean();
}
总结
Spring Boot 注解通过“约定大于配置”原则大幅提升开发效率,核心需掌握:
- 组件管理:
@Component
全家桶(@Controller
/@Service
等)与@Bean
/@Configuration
的配合。 - 依赖注入:
@Autowired
/@Resource
的选择与@Qualifier
的解歧义作用。 - Web 开发:请求映射(
@RequestMapping
)与参数绑定(@RequestBody
/@PathVariable
)。 - 配置管理:
@Value
与@ConfigurationProperties
的适用场景。
实际开发中可结合 IDE 提示快速查找注解用法,无需死记硬背,重点理解各层注解的职责与组合逻辑。
作者: 李锋镝
原文:SpringBoot常用注解 - 李锋镝的博客