





















Spring Boot 提供了大量注解用于简化配置和开发,以下是核心常用注解分类及实战用法:
作用:标识普通组件,被 Spring 容器自动扫描注册为 Bean。
场景:通用层(工具类、非 MVC 组件)。
@Component
public class MyUtils {
public void helperMethod() { /* ... */ }
}
@ResponseBody 返回数据)。
@Controller
public class ViewController {
@GetMapping("/page")
public String showPage(Model model) {
model.addAttribute("data", "Hello");
return "index"; // 返回视图名
}
}
@Controller 和 @ResponseBody,直接返回 JSON/XML。
@RestController
public class ApiController {
@GetMapping("/api/data")
public User getUser() {
return new User("Alice", 28); // 自动序列化为 JSON
}
}
@Service
public class OrderService {
public void processOrder() { /* 业务逻辑 */ }
}
@Repository
public interface UserDao {
@Select("SELECT * FROM user WHERE id=#{id}")
User findById(Long id);
}
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource(); // 配置数据源 Bean
}
}
作用:按类型自动注入 Bean,Spring 核心注解。
@RestController
public class UserController {
@Autowired
private UserService userService; // 注入服务层 Bean
}
作用:默认按名称注入,可通过 name 属性指定 Bean 名称。
@RestController
public class UserController {
@Resource(name = "userService")
private UserService userService; // 按名称注入
}
作用:与 @Autowired 配合,解决同类型 Bean 注入歧义。
@Service
public class UserService { /* ... */ }
@Service("adminService")
public class AdminService implements UserService { /* ... */ }
@RestController
public class Controller {
@Autowired
@Qualifier("adminService")
private UserService service; // 指定注入 adminService
}
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public User getById(@PathVariable Long id) { /* ... */ }
}
@GetMapping("/list")
public List list() { /* ... */ }
?name=Alice)。
@GetMapping("/search")
public String search(@RequestParam String keyword, @RequestParam int page = 1) { /* ... */ }
/user/{id})。
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) { /* ... */ }
@PostMapping("/create")
public void create(@RequestBody User user) { /* 接收 JSON 数据 */ }
作用:从配置文件(如 application.properties)读取单个属性。
@Component
public class AppConfig {
@Value("${server.port}")
private int port; // 注入端口号
}
作用:批量绑定配置属性到实体类,支持复杂结构。
# 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
}
作用:标注启动类,组合以下 3 个核心注解:
@Configuration:声明配置类。 @EnableAutoConfiguration:启用自动配置(如 Tomcat、Spring MVC 等)。 @ComponentScan:自动扫描主类所在包及其子包的组件。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
作用:手动启用自动配置,可排除特定配置。
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class AppConfig { /* 排除数据源自动配置 */ }
作用:声明数据库事务,支持传播行为、隔离级别等配置。
@Service
public class OrderService {
@Transactional(rollbackFor = Exception.class)
public void createOrder(Order order) {
// 数据库操作,异常时自动回滚
}
}
作用:实现定时任务,支持 cron 表达式。
@Component
public class ScheduledTask {
@Scheduled(cron = "0 0 0 * * MON-FRI") // 每周一到周五零点执行
public void cleanLogs() {
// 定时清理日志任务
}
}
作用:指定 Bean 作用域(默认单例)。
@Bean
@Scope("prototype") // 每次注入创建新实例
public MyBean prototypeBean() {
return new MyBean();
}
Spring Boot 注解通过“约定大于配置”原则大幅提升开发效率,核心需掌握:
@Component 全家桶(@Controller/@Service 等)与 @Bean/@Configuration 的配合。 @Autowired/@Resource 的选择与 @Qualifier 的解歧义作用。 @RequestMapping)与参数绑定(@RequestBody/@PathVariable)。 @Value 与 @ConfigurationProperties 的适用场景。 实际开发中可结合 IDE 提示快速查找注解用法,无需死记硬背,重点理解各层注解的职责与组合逻辑。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。