当前位置: 首页 > news >正文

spring 框架中常用注解汇总,及对应作用介绍、使用示例demo演示

以下是 Spring 框架中常用注解的汇总及对应作用介绍、使用示例演示:

一、核心功能注解

  1. @Component

    • 作用:标记类为 Spring 组件,会被自动扫描到 IoC 容器[1][4]。适用于通用组件类。
    • 示例
      @Component
      public class MyComponent { ... }
      
  2. @Service

    • 作用:标识该类是一个业务逻辑层的组件[1][3][7]。是 @Component 的特化形式,提供语义上的区分。
    • 示例
      @Service
      public class UserService implements MyService { ... }
      
  3. @Repository

    • 作用:标识该类是一个数据访问层的组件[1][3][7]。是 @Component 的特化形式,常用于数据访问对象(DAO)。
    • 示例
      @Repository
      public class UserDao { ... }
      
  4. @Controller

    • 作用:标识该类是一个控制器层(Controller)组件[1][3][7]。是 @Component 的特化形式,用于处理 HTTP 请求。
    • 示例
      @Controller
      public class HomeController { ... }
      
  5. @Configuration

    • 作用:用于标注一个类作为配置类,表明这个类可以包含定义 Spring Bean 的方法[1][3][4]。
    • 示例
      @Configuration
      public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
      }
      
  6. @ComponentScan

    • 作用:启用组件扫描,让 Spring 自动发现并注册带有 @Component@Service@Repository@Controller 等注解的类为 Spring Bean[1][2][8]。
    • 示例
      @Configuration
      @ComponentScan(basePackages = "com.example")
      public class AppConfig {}
      
  7. @Bean

    • 作用:用于在配置类的方法上,告诉 Spring 该方法将返回一个对象,该对象应被注册为 Spring 上下文中的 Bean[1][3][4]。
    • 示例
      @Configuration
      public class AppConfig {@Beanpublic DataSource dataSource() {return new HikariDataSource();}
      }
      

二、依赖注入与装配

  1. @Autowired

    • 作用:用于自动装配依赖,可以在构造函数、字段或 setter 方法上使用[1][3][4]。
    • 示例
      @Service
      public class MyServiceImpl implements MyService {private final MyRepository repository;@Autowiredpublic MyServiceImpl(MyRepository repository) {this.repository = repository;}
      }
      
  2. @Qualifier

    • 作用:当有多个相同类型的 Bean 时,配合 @Autowired 使用,指定具体要注入的 Bean[1][4][7]。
    • 示例
      @Autowired
      @Qualifier("specificBeanName")
      private MyComponent myComponent;
      
  3. @Primary

    • 作用:在存在多个候选 Bean 时,优先选择标记了 @Primary 的 Bean 进行注入[1][7]。
    • 示例
      @Bean
      @Primary
      public MyService primaryService() {return new PrimaryServiceImpl();
      }
      

三、生命周期回调方法

  1. @PostConstruct

    • 作用:用于标注初始化方法,在依赖注入完成后执行[1][7]。
    • 示例
      @Service
      public class MyService {@PostConstructpublic void init() {// 初始化逻辑}
      }
      
  2. @PreDestroy

    • 作用:标注销毁方法,在 Bean 销毁之前执行[1][7]。
    • 示例
      @Service
      public class MyService {@PreDestroypublic void cleanup() {// 清理逻辑}
      }
      

四、属性值注入

  1. @Value

    • 作用:用于注入外部配置的值,如从 properties 文件中读取的配置项[1][4][7]。
    • 示例
      @Component
      public class MyComponent {@Value("${my.property}")private String propertyValue;
      }
      
  2. @PropertySource

    • 作用:用来加载 properties 文件到 Spring 环境中[1][8]。
    • 示例
      @Configuration
      @PropertySource("classpath:application.properties")
      public class AppConfig {}
      

五、Web开发相关注解

  1. @RequestMapping

    • 作用:用于映射请求路径和处理方法[3][5][7]。
    • 示例
      @Controller
      @RequestMapping("/user")
      public class UserController {@GetMapping("/{id}")public String viewUser(@PathVariable("id") int id, Model model) {User user = userService.getUserById(id);model.addAttribute("user", user);return "user";}
      }
      
  2. @RestController

    • 作用:组合了 @Controller@ResponseBody,直接返回 JSON[4][5][7]。
    • 示例
      @RestController
      @RequestMapping("/api/users")
      public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return userService.findUser(id);}
      }
      
  3. @RequestParam

    • 作用:用于绑定请求参数到方法的参数上[5][7]。
    • 示例
      @GetMapping("/welcome")
      public String welcome(@RequestParam String name) {return "Welcome, " + name;
      }
      
  4. @PathVariable

    • 作用:用于从 URI 路径中提取变量并绑定到方法参数上[5][7]。
    • 示例
      @GetMapping("/user/{id}")
      public String getUser(@PathVariable("id") Long userId) {return "User ID: " + userId;
      }
      
  5. @ResponseBody

    • 作用:用于方法上,表示返回的对象会自动转为 JSON 或 XML 格式,作为 HTTP 响应体返回给客户端[5][7]。
    • 示例
      @ResponseBody
      @GetMapping("/data")
      public Data getData() {return new Data();
      }
      

六、切面与 AOP 相关注解

  1. @Aspect

    • 作用:定义一个切面类[1][5][7]。
    • 示例
      @Aspect
      @Component
      public class LoggingAspect {}
      
  2. @Before

    • 作用:定义前置通知,在目标方法执行前运行[1][5][7]。
    • 示例
      public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))")public void logBefore(JoinPoint joinPoint) {System.out.println("Attempting to execute method: " + joinPoint.getSignature().getName());}
      }
      
  3. @After

    • 作用:定义后置通知,在目标方法执行后运行(无论是否发生异常)[1][5][7]。
    • 示例
      public class LoggingAspect {@After("execution(* com.example.service.*.*(..))")public void logAfter(JoinPoint joinPoint) {System.out.println("Method executed successfully: " + joinPoint.getSignature().getName());}
      }
      
  4. @Around

    • 作用:定义环绕通知,在目标方法执行前后运行[1][5][7]。
    • 示例
      public class LoggingAspect {@Around("execution(* com.example.service.*.*(..))")public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("Before executing method: " + joinPoint.getSignature().getName());Object result = joinPoint.proceed();System.out.println("After executing method: " + joinPoint.getSignature().getName());return result;}
      }
      

综上所述,Spring 框架提供了丰富的注解来简化企业级 Java 开发。通过合理利用这些注解,可以提高代码的可读性和可维护性,同时减少样板代码的数量。

http://www.dtcms.com/a/462418.html

相关文章:

  • 网站后台下载二级建造师报名官网
  • 济宁住房和城乡建设局网站秦皇岛 免费建网站
  • 企业网站建设报价方案动易官方网站
  • 制作一个 MBTI 人格测试网页项目
  • Echarts如何实现line的实线虚线的分段,并且虚实线连接点平滑过度效果(未来预测场景)?
  • 苍穹外卖day06
  • mysql大表批量查询中IN vs JOIN vs CTE 性能实验
  • Cryptomator:免费的加密工具,
  • 逐位加|二分
  • 外贸行业网站推广wordpress galleria
  • 没技术怎么做网站湛江的高铁站建在哪里
  • MySQL 中数据完整性约束、外键管理(含级联策略) 和多表查询
  • 做效果图的网站有哪些软件有哪些wordpress漂浮
  • 为什么ffmpeg进行视频合成有时长误差
  • 做旅游销售网站平台ppt百度的域名
  • 网站建营销型企业网站有哪些类型
  • 2008服务器网站专门做定制的网站
  • 【软件设计师中级】计算机组成与结构(四):总线系统 - 计算机的“高速公路网络“
  • 专注服务于站长和网站的信息平台.网站建设需要学ps吗
  • 视频直播点播平台EasyDSS推拉流技术结合无人机推流在道路交通巡检场景中的应用
  • 涂鸦T5AI开发板直播互动游戏控制器实现方案【全开源】
  • Spring Boot 应用启动机制详解
  • 河南省建设工程造价协会网站joomla 2.5:你的网站建设_使用与管理 pdf
  • 只有通过Motor 获取 mongodb的collection,才能正常使用 async with collection.watch()监听集合变更
  • 做一个网站 如何盈利网站开发一般用什么软件有哪些
  • 能够完美“适配”不同传感器的语音芯片WT2003H
  • 怎样建设网站的步骤网站建设中js控制什么
  • 陇南地网站建设黄骅市有什么好玩的地方
  • 零基础从头教学Linux(Day 46)
  • RK3588从数据集到训练到部署YoloV8