• Spring常见的注解


    前言

    在当今的软件开发领域,Spring框架已经成为了Java开发中不可或缺的重要工具之一。其优秀的设计和丰富的功能使得开发者能够更加高效地构建出稳健、可扩展的企业级应用程序。而Spring框架的注解机制,则是其灵活性和便捷性的重要体现之一。

    本文将深入探讨Spring框架中常用的注解,分析其功能和用法,并结合实例进行详细说明。通过学习和理解这些注解,读者将能够更好地利用Spring框架的强大功能,提高自己的开发效率和代码质量。

    1.组件扫描和声明相关的注解

    @Component:通用组件注解表明是受spring管理的组件。

         三个Component的按三层架构分类的三个衍生注解(功能完全相同):

            @Controller:控制层

            @Service:业务层

            @Repository:数据层

    2.依赖注入相关注解

    @Autowried:按类型自动装配bean,底层使用了暴力反射,没有setter方法也可以注入

            @Qualifier:配合Autowried使用,如果多个该类型的bean,使用该注解声明名称注入

            @Primary:配合AutoWried使用,如果多个该类型的bean,声明本注解的bean为主要的bean

    @Resource:自动装配,按照名称注入,名称不存在按照类型注入
    下面说说二者之间的差异:

            实现方式不同:上述已经讲解注入的类型

            兼容性:

    • @Autowired:是 Spring 提供的注解,依赖于 Spring 框架,对 Java EE 平台没有依赖。
    • @Resource:是 Java EE 规范提供的注解,在 Java EE 平台上具有更好的兼容性,但也可以在 Spring 中使用。

    3.配置相关注解

    @Configuration:定义该类是一个配置类,代替了xml的配置文件。

    @Bean:用于管理第三方bean,主要用于将第三方库或外部组件集成到 Spring 应用程序中。

    原理:

    当 Spring 应用启动时,Ioc容器会扫描所有的配置类,识别其中的 @Bean 注解,并根据这些注解定义的方法来创建对应的 Bean。主要是原理还是反射来创建配置类的对象,在反射@Bean注解的方法,然后将方法的返回值的对象注册为bean,从而完成 Bean 的定义和加载过程。

    @ComponentScan:扫描@Component配置的bean,扫描到了就注册到Ioc容器,参数为扫描路径。
    @Import:实现组件化开发,用来在 Spring 配置类中引入其他配置类或普通类,并将其中声明的 Bean 导入到当前配置类中。
    @EnableAspectJAutoProxy:告诉 Spring 启用基于注解的 AOP 支持

    @Conditional:可以根据条件动态地决定某个 Bean 是否被创建,从而实现配置的灵活性。
    @Lazy:  声明bean是否延时加载。1.在配置类注解上配置类中所有的 @Bean 方法,2.在@Bean方法上,表示第三方延时加载,3.在@Compoent组件上,表明该组件是一个延时加载bean

            延时加载bean:bean的延时加载就是使用到bean的时候再去加载

            非延时加载bean:在 Spring 容器启动时会立即进行实例化和初始化,无论是否在应用中被使用。这意味着当 Spring 容器启动时,非延迟加载的 Bean 将被创建,并准备好在需要时立即使用。
    @PropertySource

    • 用于指定外部属性文件的位置。
    • 可以通过 value 属性指定属性文件的路径。
    • 在属性文件中定义的属性可以通过 @Value 注解注入到 Bean 的属性中。

    4.配置注入相关的注解 

    @Value: 注入属性值,通常从配置文件中读取。 

    5.Aop相关的注解、

     作用:在不惊动原始设计的基础上做功能增强。这就是spring的无侵入式编程。

    1. @Aspect: 声明一个切面。
    2. @Pointcut: 定义一个切入点。
      @Pointcut("execution(* com.example.UserService.*(..))")定义一个切入点表达式
    3. @Before: 在方法执行前执行通知。
    4. @AfterReturning: 在方法执行后返回结果后执行通知。
    5. @AfterThrowing: 在方法抛出异常后执行通知。
    6. @Around: 包围一个方法的通知

             这个是五大通知中最重要的方法,可以动态的声明在方法执行前还是执行后
     

    1. public Object around(ProceedingJoinPoint pjp) throws Throwable {
    2. System.out.println("环绕通知前");
    3. Object ret = pjp.proceed();
    4. System.out.println("环绕通知后");
    5. return ret;
    6. }

     AOP的主要原理:

    动态代理,获取bean是代理对象的时候,会根据代理对象的运行模式,运行原始方法与增加的内容完成操作。

    6.Web相关注解: 

    • @Controller: 标识一个类为MVC控制器。
    • @RequestMapping: 映射HTTP请求到处理方法。
    • @RequestBody: 将 HTTP 请求的主体部分(body)绑定到方法的参数上。可以让json格式封装到一个实体对象中。
    • @RequestParam:用于从 URL 中提取路径变量,并绑定到方法的参数上。
    • @RequestHeader用于从 HTTP 请求头中提取信息,并将其绑定到方法的参数上。
    • @ResponseBody: 将方法的返回值直接写入HTTP响应体中。
    • @PathVariable: 获取请求路径中的参数值。
    • @RequestParam: 获取请求参数的值。支持默认值,必需性等配置。
       
      1. public String saveList(@RequestParam List list){
      2. System.out.println(list.stream().collect(Collectors.joining(", ")));
      3. System.out.println(list);
      4. return list.stream().collect(Collectors.joining(", "));
      5. }

      从请求参数中获取的内容,然后添加到list集合中。如果是map以键值对形式存储{username=johndoe, age=30}。

    • @ResponseStatus: 设置HTTP响应的状态码和原因

    7.事务相关的注解 

    • @Transactional: 声明一个方法或类为事务性操作。
       
    • @EnableTransactionManagement: 启用 Spring 的事务管理功能。
       
    • @ReadOnly: 声明一个方法是只读的,即不会修改数据库中的数据,可用于优化性能。
       
    • @Propagation: 用于定义事务的传播行为,包括 REQUIREDSUPPORTSMANDATORYREQUIRES_NEWNOT_SUPPORTEDNEVER 和 NESTED
    • @Propagation.REQUIRED: 指定方法必须在一个事务中执行,如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
    • @Propagation.REQUIRES_NEW: 指定方法必须在一个新的事务中执行,如果当前存在事务,则挂起该事务。

    总结

    Spring框架中的注解为开发者提供了一种便捷、灵活的编程方式,大大简化了开发过程。通过本文的介绍,我们了解了各种功能分类下的常用注解,包括依赖注入、组件扫描与声明、配置、属性注入、AOP、Web等方面的注解,并通过实例进行了详细讲解。

    掌握Spring框架中的注解,可以使开发者更加轻松地实现各种功能,提高代码的可读性和可维护性。希望本文能够对读者在Spring框架的学习和应用中起到一定的指导作用,为他们的项目开发提供帮助和启发。

  • 相关阅读:
    Java集合自定义字段排序
    Apache Hudi 在 vivo 湖仓一体的落地实践
    java爬虫破解滑块验证码
    戴尔电脑cpu温度过高怎么办
    分享如何撰写吸引人的开发信
    7个原则,看懂「深色模式」设计
    汇川Easy521PLC与压力传感器485通讯实例
    无人驾驶迎来新高度!以后每辆车都有这些功能...
    暑假加餐|有钱人和你想的不一样(第15天)+财富与金钱的秘密【干货】
    VMware/kali使用小贴士(持续更新(吧
  • 原文地址:https://blog.csdn.net/m0_74749208/article/details/138784304