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 提示快速查找注解用法,无需死记硬背,重点理解各层注解的职责与组合逻辑。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
文章评论
好高深看不懂的样子~
@Seer
