springboot常用注解 | PHM's world

LOADING

歡迎來到烏托邦的世界

springboot常用注解

2024/4/13 基础 Java

Spring Boot 作为一种简化 Spring 应用开发的框架,使用了许多注解来减少常规配置的需要。下面是一些在 Spring Boot 中常用的注解,按功能分类并附上简要的说明:

核心注解

  • @SpringBootApplication

    • 场景:用于主类,标记应用的启动点。
    • 用法:自动包含了@Configuration@EnableAutoConfiguration@ComponentScan
    • 含义:表示这是一个 Spring Boot 应用的入口,并启用自动配置和组件扫描。
  • @EnableAutoConfiguration

    • 场景:让 Spring Boot 根据类路径下的 jar 包依赖为当前项目进行自动配置。
    • 用法:通常不单独使用,被包含在 @SpringBootApplication 中。
    • 含义:自动配置 Spring 应用上下文。
  • @ComponentScan

    • 场景:自动扫描并加载符合条件的组件或bean定义,一般用于指定扫描的路径。
    • 用法:可以指定 basePackages 来定义扫描的包。
    • 含义:让 Spring 寻找其他组件、配置和服务。

配置类相关注解

  • @Configuration

    • 场景:定义配置类,可替代 XML 配置文件。
    • 用法:在类上使用,类中的方法可用 @Bean 生成 bean。
    • 含义:表明该类是用于 Spring 应用的配置。
  • @Bean

    • 场景:在配置类中,用于定义一个 Spring 管理的 bean。
    • 用法:在方法上使用,返回值是一个对象,该对象被注册为一个 bean。
    • 含义:方法级别的注解,用于将方法返回的实例注册为 Spring 应用上下文中的 bean。

组件扫描注解

  • @Component

    • 场景:定义一个组件,Spring 应该管理其生命周期。
    • 用法:可用于类级别,作为一个泛指的组件标记。
    • 含义:标记类为 Spring 管理的组件。
  • @Service

    • 场景:特指服务层组件。
    • 用法:用于业务逻辑服务层的类。
    • 含义:标记服务层业务组件,Spring 管理其生命周期。
  • @Repository

    • 场景:特指数据访问组件。
    • 用法:用于数据访问层的类,如 DAO 类。
    • 含义:标记数据访问组件,提供 CRUD 功能。
  • @Controller

    • 场景:特指控制层组件。
    • 用法:用于 MVC 模式中的控制层类。
    • 含义:标记控制层组件,处理请求并返回响应。
  • @RestController

    • 场景:控制器组件,专用于 RESTful Web 服务。
    • 用法:相当于 @Controller + @ResponseBody
    • 含义:处理 HTTP 请求,并自动将返回的对象序列化为 JSON 或 XML 响应。

Web 映射注解

  • @RequestMapping

    • 场景:定义请求的 URL 模式与处理方法的映射关系。
    • 用法:可用于类或方法上,指定 URL、请求方法等。
    • 含义:通用的请求映射注解。
  • @GetMapping, @PostMapping, @PutMapping, @DeleteMapping

    • 场景:分别用于处理 HTTP GET, POST, PUT, DELETE 请求。
    • 用法:方法级

别的映射,简化了 @RequestMapping 方法。

  • 含义:简化的请求映射注解,针对具体的 HTTP 方法。

数据和依赖注入相关注解

  • @Autowired

    • 场景:自动注入 Spring 容器管理的 bean。
    • 用法:可用于构造器、字段、设置方法上。
    • 含义:依赖注入,减少手动编码。
  • @Value

    • 场景:注入属性文件中的值。
    • 用法:在字段上使用,与 @PropertySource 配合加载属性。
    • 含义:注入配置文件或环境变量中的值。
  • @Transactional

    • 场景:声明事务管理。
    • 用法:可用于类或方法上,标记事务的边界。
    • 含义:管理事务,确保数据的一致性和完整性。

下面我将为上述每个Spring Boot常用注解提供具体的示例用法:

核心注解

@SpringBootApplication

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

@EnableAutoConfiguration

(通常包含在 @SpringBootApplication 中,以下为单独使用示例)

@Configuration
@EnableAutoConfiguration
public class MyConfiguration {
}

@ComponentScan

@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class AppConfig {
}

配置类相关注解

@Configuration

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

@Bean

@Configuration
public class AppConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

组件扫描注解

@Component

@Component
public class MyComponent {
    // class body
}

@Service

@Service
public class BookService {
    // service methods
}

@Repository

@Repository
public class BookRepository {
    // repository methods
}

@Controller

@Controller
public class MyController {
    @RequestMapping("/greeting")
    public String greeting() {
        return "Hello, World!";
    }
}

@RestController

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

Web 映射注解

@RequestMapping

@Controller
public class MyController {
    @RequestMapping(value = "/home", method = RequestMethod.GET)
    public String home() {
        return "home";
    }
}

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping

@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PostMapping
    public User addUser(@RequestBody User user) {
        return userService.saveUser(user);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        return userService.updateUser(id, user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

数据和依赖注入相关注解

@Autowired

@Service
public class UserService {
    private UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

@Value

@Component
public class MyComponent {
    @Value("${my.value}")
    private String myValue;
}

@Transactional

@Service
public class TransactionalService {
    @Transactional
    public void performTransactionalOperation() {
        // operation logic
    }
}

每个注解都设计有特定的使用场景和目的,通过这些示例,可以清晰看到每个注解如何在实际的Spring Boot应用中使用。这有助于构建结构良好且易于管理的Spring Boot应用。