Java Boot注解案例怎么使用

wen java案例 31

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中最常用的注解案例,根据实际需求选择合适的注解来简化开发。

Java Boot注解案例怎么使用

抱歉,评论功能暂时关闭!