SpringBoot相关注解及用法

SpringBoot相关注解及用法

总结一下SpringBoot相关注解及用法,方便自己日后查阅以及复习

一、核心注解

1. @SpringBootApplication

  • 作用:Spring Boot 应用的入口注解,组合了以下三个注解:
    • @Configuration:标记当前类为配置类,可包含 @Bean 方法。
    • @EnableAutoConfiguration:启用 Spring Boot 的自动配置机制。
    • @ComponentScan:扫描当前包及其子包下的组件(如 @Controller, @Service, @Repository 等)。
  • 示例
    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

2. @Component

  • 作用:通用组件注解,标记一个类为 Spring 管理的 Bean。
  • 示例
    // 定义一个带有 @Component 的Bean
    @Component
    public class MyService {
        public void doSomething() { ... }
    }
    
    // 在另一个类中通过 @Autowired 注入
    @Component
    public class AnotherService {
        @Autowired
        private MyService myService;
    }
    
    

@Service:特化 @Component,通常用于服务层(Service Layer)。
@Repository:特化 @Component,通常用于数据访问层(DAO层),并能集成Spring的异常转换。
@Controller:特化 @Component,用于Web层(如Spring MVC的控制器)。

3. @ComponentScan

  • 作用:指定扫描组件的包路径(通常与 @SpringBootApplication 结合使用)。
  • 示例
    @SpringBootApplication
    @ComponentScan("com.example")
    public class Application { ... }
    

二、Bean 配置注解

1. @Configuration

  • 作用:标记一个类为配置类,用于定义 Bean(通过 @Bean 方法)。
  • 示例
    @Configuration
    public class AppConfig {
        @Bean
        public MyService myService() {
            return new MyService();
        }
    }
    

2. @Bean

  • 作用:在配置类中显式定义一个 Bean。
  • 示例:见上文 @Configuration 示例。

3. @Scope

  • 作用:定义 Bean 的作用域(默认为 singleton)。
  • 示例
    @Scope("prototype")
    @Component
    public class MyBean { ... }
    

三、组件类型注解

1. @Controller

  • 作用:标记一个类为控制器,处理 HTTP 请求(通常与 @RequestMapping 配合使用)。
  • 示例
    @Controller
    public class MyController {
        @RequestMapping("/hello")
        public String hello() {
            return "hello";
        }
    }
    

2. @RestController

  • 作用:组合 @Controller@ResponseBody,直接返回数据(如 JSON)。
  • 示例
    @RestController
    public class MyRestController {
        @GetMapping("/data")
        public Map<String, Object> getData() {
            return Map.of("message", "Hello World");
        }
    }
    

3. @Service

  • 作用:标记一个类为服务层组件(通常用于业务逻辑)。
  • 示例
    @Service
    public class MyService {
        public String sayHello() {
            return "Hello!";
        }
    }
    

4. @Repository

  • 作用:标记一个类为数据访问层组件(如 DAO),用于异常转换。
  • 示例
    @Repository
    public class MyRepository {
        // 数据库操作
    }
    

四、依赖注入注解

1. @Autowired

  • 作用:自动装配 Bean(可通过构造函数、字段或方法注入)。
  • 示例
    @Service
    public class MyService {
        @Autowired
        private MyRepository myRepository;
    }
    

2. @Qualifier

  • 作用:当存在多个相同类型的 Bean 时,指定具体 Bean 的名称。
  • 示例
    @Autowired
    @Qualifier("myBean")
    private MyBean myBean;
    

3. @Value

  • 作用:注入配置文件中的属性值(如 application.properties)。
  • 示例
    @Value("${app.name}")
    private String appName;
    

五、Web 相关注解

1. @RequestMapping

  • 作用:映射 HTTP 请求到方法或类。
  • 示例
    @RequestMapping("/users")
    public class UserController {
        @RequestMapping(method = RequestMethod.GET)
        public List<User> getAllUsers() { ... }
    }
    

2. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping

  • 作用:简化 @RequestMapping 的方法类型指定。
  • 示例
    @PostMapping("/create")
    public User createUser(@RequestBody User user) { ... }
    

3. @RequestBody

  • 作用:将 HTTP 请求体反序列化为对象。
  • 示例:见上文 @PostMapping 示例。

4. @PathVariable

  • 作用:从 URL 路径中提取变量。
  • 示例
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable("id") Long id) { ... }
    

六、数据访问注解

1. @Transactional

  • 作用:声明事务边界(通常用于服务层方法)。
  • 示例
    @Service
    public class MyService {
        @Transactional
        public void saveUser(User user) { ... }
    }
    

2. @Entity

  • 作用:标记一个类为 JPA 实体类(用于数据库映射)。
  • 示例
    @Entity
    public class User {
        @Id
        @GeneratedValue
        private Long id;
        // 其他字段和方法
    }
    

3. @RepositoryRestResource

  • 作用:暴露 Spring Data REST 的资源(需启用 @EnableSpringDataWebSupport)。
  • 示例
    @RepositoryRestResource(path = "books")
    public interface BookRepository extends JpaRepository<Book, Long> { ... }
    

七、配置与条件注解

1. @EnableAutoConfiguration

  • 作用:启用 Spring Boot 的自动配置(通常由 @SpringBootApplication 包含)。

2. @ConditionalOnProperty

  • 作用:根据配置属性条件加载 Bean。
  • 示例
    @ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
    @Bean
    public FeatureService featureService() { ... }
    

3. @Profile

  • 作用:根据活跃的 Profile 加载 Bean。
  • 示例
    @Profile("dev")
    @Configuration
    public class DevConfig { ... }
    

八、测试相关注解

1. @SpringBootTest

  • 作用:启动完整的 Spring 上下文用于测试。
  • 示例
    @SpringBootTest
    public class MyApplicationTests {
        @Autowired
        private MyService myService;
        // 测试方法
    }
    

2. @MockBean

  • 作用:在测试中替换 Bean 为 Mock 对象。
  • 示例
    @MockBean
    private MyRepository myRepository;
    

九、其他常用注解

1. @PostConstruct

  • 作用:在 Bean 初始化后执行方法。
  • 示例
    @PostConstruct
    public void init() { ... }
    

2. @PreDestroy

  • 作用:在 Bean 销毁前执行方法。
  • 示例
    @PreDestroy
    public void cleanup() { ... }
    

3. @CrossOrigin

  • 作用:启用跨域资源共享(CORS)。
  • 示例
    @CrossOrigin(origins = "http://example.com")
    @RestController
    public class MyController { ... }
    
posted @ 2025-07-04 23:53  cwp0  阅读(42)  评论(0)    收藏  举报