Spring框架常用注解

以下是Spring框架中常用注解的详细分类和说明,涵盖核心组件管理、依赖注入、配置类、AOP、事务管理、Web开发、测试等多个方面:

一、核心组件管理注解

  1. @Component

    • 作用:通用注解,标记一个类为Spring管理的组件。
    • 场景:适用于任何需要被Spring容器管理的类(如工具类、辅助类)。
    • 示例
      @Component
      public class MyComponent { ... }
      
  2. @Service

    • 作用:标记业务逻辑层(Service层)组件。
    • 场景:用于业务逻辑实现(如用户管理、订单处理)。
    • 示例
      @Service
      public class UserService { ... }
      
  3. @Repository

    • 作用:标记数据访问层(DAO层)组件,提供数据访问异常转换。
    • 场景:用于数据库交互(如JDBC、JPA操作)。
    • 示例
      @Repository
      public class UserRepository { ... }
      
  4. @Controller

    • 作用:标记Web层控制器,处理HTTP请求。
    • 场景:用于Spring MVC控制器(如接收请求并返回视图)。
    • 示例
      @Controller
      public class UserController { ... }
      
  5. @RestController

    • 作用:组合注解,相当于@Controller@ResponseBody的组合。
    • 场景:用于RESTful API开发,直接返回JSON数据。
    • 示例
      @RestController
      public class ApiController { ... }
      

二、依赖注入注解

  1. @Autowired

    • 作用:自动注入依赖,按类型匹配。
    • 场景:字段、构造器、Setter方法注入。
    • 示例
      @Autowired
      private UserRepository userRepository;
      
  2. @Qualifier

    • 作用:与@Autowired配合使用,指定注入的Bean名称。
    • 场景:解决多个同类型Bean的注入歧义。
    • 示例
      @Autowired
      @Qualifier("mysqlDataSource")
      private DataSource dataSource;
      
  3. @Resource

    • 作用:JSR-250标准注解,按名称匹配注入。
    • 场景:类似@Autowired,但优先按名称匹配。
    • 示例
      @Resource(name = "orderService")
      private OrderService orderService;
      
  4. @Inject

    • 作用:JSR-330标准注解,功能类似@Autowired
    • 场景:跨框架依赖注入(如CDI集成)。
    • 示例
      @Inject
      private Address address;
      

三、配置类相关注解

  1. @Configuration

    • 作用:声明类为配置类,替代XML配置。
    • 场景:定义Bean的创建逻辑。
    • 示例
      @Configuration
      public class AppConfig { ... }
      
  2. @Bean

    • 作用:声明方法返回值为Bean,注册到Spring容器。
    • 场景:在配置类中定义Bean。
    • 示例
      @Bean
      public DataSource dataSource() {
          return new HikariDataSource();
      }
      
  3. @ComponentScan

    • 作用:指定包路径扫描组件。
    • 场景:自动发现@Component@Service等注解的类。
    • 示例
      @Configuration
      @ComponentScan(basePackages = "com.example.service")
      public class AppConfig { ... }
      
  4. @Import

    • 作用:导入其他配置类。
    • 场景:模块化配置。
    • 示例
      @Configuration
      @Import({DatabaseConfig.class, SecurityConfig.class})
      public class MainConfig { ... }
      

四、AOP相关注解

  1. @Aspect

    • 作用:声明类为切面类。
    • 场景:定义切面逻辑(如日志、事务)。
    • 示例
      @Aspect
      @Component
      public class LoggingAspect { ... }
      
  2. @Before@After@Around

    • 作用:定义切面的通知类型(前置、后置、环绕)。
    • 场景:拦截方法执行。
    • 示例
      @Before("execution(* com.example.service.*.*(..))")
      public void logBefore() { ... }
      
  3. @Pointcut

    • 作用:声明切点表达式。
    • 场景:复用切点定义。
    • 示例
      @Pointcut("execution(* com.example.service.*.*(..))")
      public void serviceLayer() { }
      
  4. @EnableAspectJAutoProxy

    • 作用:开启AspectJ自动代理。
    • 场景:启用AOP支持。
    • 示例
      @Configuration
      @EnableAspectJAutoProxy
      public class AppConfig { ... }
      

五、事务管理注解

  1. @Transactional
    • 作用:声明事务性方法,管理事务传播行为和隔离级别。
    • 场景:确保方法执行的原子性。
    • 示例
      @Service
      public class OrderService {
          @Transactional
          public void createOrder(Order order) { ... }
      }
      

六、作用域和生命周期注解

  1. @Scope

    • 作用:设置Bean的作用域(如singletonprototype)。
    • 场景:控制Bean的实例化行为。
    • 示例
      @Component
      @Scope("prototype")
      public class PrototypeBean { ... }
      
  2. @PostConstruct

    • 作用:Bean初始化后执行的方法。
    • 场景:初始化资源(如数据库连接)。
    • 示例
      @PostConstruct
      public void init() { ... }
      
  3. @PreDestroy

    • 作用:Bean销毁前执行的方法。
    • 场景:释放资源(如关闭连接池)。
    • 示例
      @PreDestroy
      public void destroy() { ... }
      

七、Web开发相关注解

  1. @RequestMapping

    • 作用:映射Web请求到处理方法。
    • 场景:定义请求路径和HTTP方法。
    • 示例
      @RequestMapping(value = "/users", method = RequestMethod.GET)
      public String getUserList() { ... }
      
  2. @GetMapping@PostMapping

    • 作用:HTTP方法快捷注解(如@GetMapping对应GET请求)。
    • 场景:简化请求映射。
    • 示例
      @GetMapping("/users")
      public String getUsers() { ... }
      
  3. @PathVariable

    • 作用:获取路径参数。
    • 场景:RESTful API参数绑定。
    • 示例
      @GetMapping("/users/{id}")
      public String getUser(@PathVariable Long id) { ... }
      
  4. @RequestParam

    • 作用:获取请求参数。
    • 场景:绑定查询参数。
    • 示例
      @GetMapping("/search")
      public String search(@RequestParam String keyword) { ... }
      
  5. @RequestBody

    • 作用:将请求体绑定到方法参数。
    • 场景:处理JSON/XML请求体。
    • 示例
      @PostMapping("/users")
      public String createUser(@RequestBody User user) { ... }
      
  6. @ResponseBody

    • 作用:将返回值写入HTTP响应。
    • 场景:返回JSON/XML数据。
    • 示例
      @GetMapping("/data")
      @ResponseBody
      public Data getData() { ... }
      
  7. @ControllerAdvice

    • 作用:全局处理控制器配置和异常。
    • 场景:统一异常处理、数据绑定。
    • 示例
      @ControllerAdvice
      public class GlobalExceptionHandler {
          @ExceptionHandler(Exception.class)
          public ResponseEntity<String> handleException(Exception e) { ... }
      }
      

八、测试相关注解

  1. @RunWith

    • 作用:指定测试运行器(如SpringJUnit4ClassRunner)。
    • 场景:集成测试。
    • 示例
      @RunWith(SpringRunner.class)
      public class UserServiceTest { ... }
      
  2. @ContextConfiguration

    • 作用:加载ApplicationContext配置。
    • 场景:指定配置类或XML文件。
    • 示例
      @ContextConfiguration(classes = TestConfig.class)
      public class UserServiceTest { ... }
      

九、条件化和环境相关注解

  1. @Profile

    • 作用:根据环境激活Bean。
    • 场景:多环境配置(如开发、生产)。
    • 示例
      @Bean
      @Profile("dev")
      public DataSource devDataSource() { ... }
      
  2. @Conditional

    • 作用:根据条件创建Bean。
    • 场景:动态Bean注册。
    • 示例
      @Bean
      @Conditional(WindowsCondition.class)
      public FileSystemService windowsService() { ... }
      

十、异步和定时任务注解

  1. @EnableAsync

    • 作用:开启异步任务支持。
    • 场景:启用@Async注解。
    • 示例
      @Configuration
      @EnableAsync
      public class AsyncConfig { ... }
      
  2. @Async

    • 作用:声明异步任务方法。
    • 场景:方法异步执行。
    • 示例
      @Service
      public class AsyncService {
          @Async
          public void asyncMethod() { ... }
      }
      
  3. @EnableScheduling

    • 作用:开启定时任务支持。
    • 场景:启用@Scheduled注解。
    • 示例
      @Configuration
      @EnableScheduling
      public class ScheduleConfig { ... }
      
  4. @Scheduled

    • 作用:声明定时任务方法。
    • 场景:周期性任务(如cron表达式)。
    • 示例
      @Scheduled(cron = "0 0 * * * ?")
      public void scheduledTask() { ... }
      

十一、其他常用注解

  1. @Value

    • 作用:注入属性值,支持多种注入方式(如配置文件、环境变量)。
    • 场景:属性赋值。
    • 示例
      @Value("${app.name}")
      private String appName;
      
  2. @Lazy

    • 作用:延迟初始化Bean。
    • 场景:优化启动性能。
    • 示例
      @Bean
      @Lazy
      public HeavyBean heavyBean() { ... }
      
  3. @Primary

    • 作用:解决自动装配歧义,设置首选Bean。
    • 场景:多个同类型Bean时指定默认注入。
    • 示例
      @Bean
      @Primary
      public DataSource primaryDataSource() { ... }
      

通过合理使用这些注解,开发者可以显著简化配置、提高代码可读性和可维护性,从而提升开发效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值