Java Boot注解使用案例
常用注解及示例
1 @SpringBootApplication
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 组合了
@Configuration、@EnableAutoConfiguration、@ComponentScan
2 @RestController & @RequestMapping
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
// 查询用户
return userService.findById(id);
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
}
3 @Service & @Repository
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findById(Long id) {
return userRepository.findById(id).orElse(null);
}
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// 自动实现CRUD方法
}
4 @Autowired & @Qualifier
@Service
public class OrderService {
// 方式1:字段注入
@Autowired
private UserService userService;
// 方式2:构造器注入(推荐)
private final PaymentService paymentService;
public OrderService(PaymentService paymentService) {
this.paymentService = paymentService;
}
// 方式3:使用Qualifier指定Bean
@Autowired
@Qualifier("alipayServiceImpl")
private PaymentService alipayService;
}
配置类注解
1 @Configuration & @Bean
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create()
.url("jdbc:mysql://localhost:3306/test")
.username("root")
.password("password")
.build();
}
}
2 @Value & @ConfigurationProperties
// application.properties
// app.name=MyApplication
// app.version=1.0.0
// server.port=8080
@Component
public class AppInfo {
@Value("${app.name}")
private String appName;
@Value("${app.version:1.0.0}") // 带默认值
private String version;
}
// 使用@ConfigurationProperties
@Component
@ConfigurationProperties(prefix = "app")
public class AppSettings {
private String name;
private String version;
private List<String> servers;
// getters and setters
}
事务注解
1 @Transactional
@Service
public class TransferService {
@Autowired
private AccountRepository accountRepository;
@Transactional(rollbackFor = Exception.class)
public void transfer(Long fromId, Long toId, BigDecimal amount) {
Account from = accountRepository.findById(fromId).orElseThrow();
Account to = accountRepository.findById(toId).orElseThrow();
from.setBalance(from.getBalance().subtract(amount));
to.setBalance(to.getBalance().add(amount));
accountRepository.save(from);
accountRepository.save(to);
}
}
异步处理注解
1 @Async
@SpringBootApplication
@EnableAsync // 启用异步支持
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Service
public class EmailService {
@Async
public CompletableFuture<Boolean> sendEmail(String to, String content) {
// 异步发送邮件
try {
Thread.sleep(1000); // 模拟耗时操作
System.out.println("发送邮件到: " + to);
return CompletableFuture.completedFuture(true);
} catch (InterruptedException e) {
return CompletableFuture.completedFuture(false);
}
}
}
// 调用异步方法
@RestController
public class NotificationController {
@Autowired
private EmailService emailService;
@PostMapping("/send-email")
public String sendEmail() {
emailService.sendEmail("test@example.com", "Hello");
return "邮件发送请求已提交";
}
}
定时任务注解
1 @Scheduled
@SpringBootApplication
@EnableScheduling // 启用定时任务
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Component
public class ScheduledTasks {
// 每5秒执行一次
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("当前时间: " + new Date());
}
// 使用cron表达式 - 每天中午12点执行
@Scheduled(cron = "0 0 12 * * ?")
public void runAtNoon() {
System.out.println("每天中午12点执行");
}
// 延迟1秒后,每10秒执行一次
@Scheduled(fixedDelay = 10000, initialDelay = 1000)
public void delayedTask() {
System.out.println("延迟后定时执行");
}
}
缓存注解
1 @Cacheable & @CacheEvict
@Service
public class ProductService {
// 缓存查询结果
@Cacheable(value = "products", key = "#id")
public Product findById(Long id) {
// 模拟耗时查询
slowDatabaseQuery();
return new Product(id, "Product " + id);
}
// 更新缓存
@CachePut(value = "products", key = "#product.id")
public Product update(Product product) {
return productRepository.save(product);
}
// 清除缓存
@CacheEvict(value = "products", key = "#id")
public void delete(Long id) {
productRepository.deleteById(id);
}
// 清除所有缓存
@CacheEvict(value = "products", allEntries = true)
public void clearAllCache() {
System.out.println("清除所有产品缓存");
}
}
完整示例 - 用户管理
// 实体类
@Entity
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
// Repository
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
}
// Service
@Service
@Transactional
public class UserService {
@Autowired
private UserRepository userRepository;
@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("用户不存在"));
}
@CacheEvict(value = "users", key = "#user.id")
public User createUser(User user) {
return userRepository.save(user);
}
}
// Controller
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
return ResponseEntity.ok(userService.getUserById(id));
}
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
return ResponseEntity.status(HttpStatus.CREATED)
.body(userService.createUser(user));
}
}
这些是Spring Boot中最常用的注解案例,根据实际需求选择合适的注解来简化开发。
