SpringBoot常用注解总结

目录

一、核心注解

1. @SpringBootApplication

2. @EnableAutoConfiguration 

3. @Configuration

 二、组件扫描和注入注解

4. @ComponentScan

 5. @Component       

6. @Service

7. @Repository

8. @Controller

 9. @RestController

三、数据绑定和验证注解

10. @RequestMapping

11. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping

12. @ResponseBody

13. @RequestBody

 四、其他常用注解

14. @Autowired & @Qualifier

 15. @Resource

16. @Scope

五、组合与扩展注解

1. @Transactional

2. @Scheduled

3. @Async


        今天我们来深入探讨Spring Boot中的常用注解,这些注解是简化配置、自动装配组件和实现声明式服务的关键。无论你是初学者还是有经验的开发者,掌握这些注解都将大大提高你的开发效率。本文将详细介绍每个注解的作用及其用法,并给出实际应用示例。

一、核心注解

1. @SpringBootApplication

        标注在主程序类上,表示这是一个Spring Boot应用的入口。它是一个复合注解,包括了@Configuration@EnableAutoConfiguration@ComponentScan。(我们一般不会主动去使用它)

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

2. @EnableAutoConfiguration 

        启用Spring Boot的自动配置机制,根据添加的依赖和配置文件自动配置Spring应用。

@EnableAutoConfiguration
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

3. @Configuration

        标识一个类作为配置类,相当于传统的Spring XML配置文件。可以包含一个或多个@Bean方法。

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

 二、组件扫描和注入注解

4. @ComponentScan

        指定要扫描的包,以便发现和注册Spring组件。默认情况下,扫描主应用类所在的包及其子包。

@ComponentScan(basePackages = "com.example")
public class MyApplication {
}

 5. @Component       

        将一个类标识为Spring组件(Bean),可以被Spring容器自动检测和注册。通用注解,适用于任何层次的组件。

@Component
public class MyComponent {
}

6. @Service

        标识服务层组件,实际上是@Component的一个特化,用于表示业务逻辑服务

@Service
public class MyService {
}

7. @Repository

       标识持久层组件(dao层),实际上是@Component的一个特化,用于表示数据访问组件。常用于与数据库交互。 

@Repository
public class MyRepository {
}

8. @Controller

        标识控制层组件,实际上是@Component的一个特化,用于表示Web控制器。处理HTTP请求并返回视图或响应数据。

@Controller
public class MyController {
}

 9. @RestController

        标识RESTful Web服务的控制器,实际上是@Controller@ResponseBody的结合。返回的对象会自动序列化为JSON或XML,并写入HTTP响应体中。

@RestController
public class MyRestController {
}

三、数据绑定和验证注解

10. @RequestMapping

        映射HTTP请求到处理方法上(支持GET、POST、PUT、DELETE等)

@Controller
public class MyController {
    @RequestMapping("/hello")
    public String sayHello() {
        return "hello";
    }
}

11. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping

        映射HTTP 请求到处理方法上。

@RestController
public class MyRestController {
    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.getAllUsers();
    }
}

@GetMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.GET)

@PostMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.POST)

@PutMapping("/users/{userId}") 等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)

@DeleteMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)

12. @ResponseBody

        将方法的返回值转换为指定格式(如JSON、XML)作为HTTP响应的内容返回给客户端。常用于RESTful服务中。

@RestController
public class MyRestController {
    @GetMapping("/hello")
    @ResponseBody
    public String sayHello() {
        return "Hello, World!";
    }
}

13. @RequestBody

        将HTTP请求体的内容(如JSON、XML)转换为Java对象。常用于接收前端传递的数据。

@RestController
public class MyRestController {
    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }
}

 四、其他常用注解

14. @Autowired & @Qualifier

            @Autowired用于自动注入依赖对象;@Qualifier用于指定注入特定名称的bean。 

@Autowired
@Qualifier("baseDao")
private BaseDao baseDao;

 15. @Resource

        按名称装配bean,如果找不到则按类型装配。属于J2EE的注解。

@Resource(name = "baseDao")
private BaseDao baseDao;

16. @Scope

        指定bean的作用域,如singleton、prototype等。

@Bean
@Scope("prototype")
public Person personPrototype() {
    return new Person();
}

        常见的 Spring Bean 的作用域:

  • singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
  • prototype : 每次请求都会创建一个新的 bean 实例。
  • request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
  • session : 每一个 HTTP Session 会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

五、组合与扩展注解

        除了上述常用的单一注解外,Spring还提供了一些组合注解和扩展注解,用于更细粒度地控制应用行为。以下是几个常见的组合与扩展注解:

1. @Transactional

        用于声明事务性操作,确保方法在一个事务上下文中运行。如果方法执行失败,事务将被回滚。这对于需要保证数据一致性的操作非常有用。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    @Transactional
    public void registerUser(String username, String password) {
        User user = new User(username, password);
        userRepository.save(user); // 如果这行代码出错,事务将回滚
    }
}

2. @Scheduled

        用于声明定时任务,可以让方法按照指定的时间规则运行。常用于需要定期执行某些操作的场景,如数据备份、定时清理等。

@Component
public class ScheduledTasks {
    @Scheduled(fixedRate = 5000) //每5秒执行一次该方法
    public void scheduleTask() {
        System.out.println("Scheduled task executed");
    }
}

3. @Async

        用于声明异步方法,使得该方法在一个单独的线程中执行,不会阻塞调用者。这对于耗时操作非常有用,可以提高应用的响应速度。

@Service
public class AsyncService {
    @Async
    public CompletableFuture<Void> doAsyncTask() {
        // 模拟长时间任务,如IO操作或复杂计算
        try {
            Thread.sleep(5000); // 模拟耗时任务
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return CompletableFuture.completedFuture(null);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值