SpringAop拦截参数带注解的方法

 更新时间:2024年12月20日 11:37:00   作者:假女吖☌  
这篇文章主要介绍了SpringAop拦截参数带注解的方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧

SpringAop拦截参数带注解的方法

拦截方法中参数类型为String 且带有@Crypto注解的方法:execution(* *(..,@Crypto (String),..))

拦截方法中参数上带有@Crypto注解的方法:execution(* *(..,@Crypto (*),..))

  • ..:零个或者多个
  • *:通配符

样例

/**
 * 针对带有@Crypto注解的参数进行加密
 * @param joinPoint
 * @return
 * @throws Throwable
 */
@Around(value = "execution(* *(..,@Crypto (String),..))")
public Object encrypt(ProceedingJoinPoint joinPoint){}

扩展:Spring常见三种注入方式

Spring常见三种注入方式

1、field注入(字段注入)

@Controller
public class FooController {
   @Autowired
   private FooService fooService;
   //简单的使用例子,下同
   public List<Foo> listFoo() {
       return fooService.list();
   }
}

最常见的注入方式、注入方式简单明了,类中定义全局变量,可以使用@Autowired、@Resource、@Inject注解来实现

2、构造器注入

@Controller
public class FooController {
   private final FooService fooService;
   public FooController(FooService fooService) {
       this.fooService = fooService;
   }
   //使用方式上同
   public List<Foo> listFoo() {
       return fooService.list();
   }
}

定义final类型变量,并定义一个带有带变量的构造函数,在构造函数初始化该变量,变量不能是static类型。Spring4.x版本中推荐的注入方式。如果在需要注入的变量很多的情况下,构造很熟会很大很影响代码美观,所以推荐lombok的注解@RequiredArgsConstructor,该注解作用于类上,可以给当前生成一个构造函数,该构造函数的参数为当前类中被@NotNull注解修饰的变量和final类型的变量。

 3、setter注入

@Controller
 public class FooController {
   private FooService fooService;
   @Autowired
   public void setFooService(FooService fooService) {
       this.fooService = fooService;
  }
  //使用方式上同
  public List<Foo> listFoo() {
      return fooService.list();
  }
 }

定义一个变量,并实现该变量的set方法,set方法需要加上注解@Autowired,Spring3.x刚推出的时候,推荐使用注入的就是这种。改注解的优点就是可以在类使用之后重新配置或者重新注入。

构造器注入的好处:

构造器注入是Spring4.x版本中推荐的注入方式,Spring官方对此也有解释,翻译过来就是构造器注入的方式啊,能够保证注入的**依赖不可变**,并且确保需要的**依赖不为空**。此外,构造器注入的依赖总是能够在返回客户端(组件)代码的时候保证**完全初始化的状态**。

1、依赖不可变:就是变量上final关键字的作用。

2、依赖不为空:因为是通过构造函数注入的,Spring容器在实例化的时候会调用构造函数传入具体值。

3、完全初始化的状态:这个可以跟上面的依赖不为空结合起来,向构造器传参之前,要确保注入的内容不为空,那么肯定要调用依赖组件的构造方法完成实例化。而在Java类加载实例化的过程中,构造方法是最后一步(之前如果有父类先初始化父类,然后自己的成员变量,最后才是构造方法)。所以返回来的都是初始化之后的状态。

field注入的缺点:

1、对于IOC容器之外的环境,会报错NPE

 FooController fooController = new FooController();
 fooController.listFoo(); //NullPointerException

2、在循环依赖的场景下,构造器注入在项目启动启动时会报错、而field注入的方式启动时不会报错,在使用具体的对象时才会报错

另外,在一个依赖的接口有多个实现类时,推荐使用field注入或者setter注入的方式来指定注入类型。

到此这篇关于SpringAop拦截参数带注解的方法的文章就介绍到这了,更多相关SpringAop拦截参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • RabbitMQ的ACK确认机制保障消费端消息的可靠性详解

    RabbitMQ的ACK确认机制保障消费端消息的可靠性详解

    这篇文章主要介绍了RabbitMQ的ACK确认机制保障消费端消息的可靠性详解,简单来说,就是你必须关闭 RabbitMQ 的自动ack ,可以通过一个 api 来调用就行,然后每次你自己代码里确保处理完的时候,再在程序里 ack 一把,需要的朋友可以参考下
    2023-12-12
  • Spring整合Quartz Job以及Spring Task的实现方法

    Spring整合Quartz Job以及Spring Task的实现方法

    下面小编就为大家分享一篇Spring整合Quartz Job以及Spring Task的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • idea在运行期间,实现让修改的页面实时生效

    idea在运行期间,实现让修改的页面实时生效

    这篇文章主要介绍了idea在运行期间,实现让修改的页面实时生效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • java使用elasticsearch分组进行聚合查询过程解析

    java使用elasticsearch分组进行聚合查询过程解析

    这篇文章主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • springboot拦截器过滤token,并返回结果及异常处理操作

    springboot拦截器过滤token,并返回结果及异常处理操作

    这篇文章主要介绍了springboot拦截器过滤token,并返回结果及异常处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 使用新版Maven-mvnd快速构建项目

    使用新版Maven-mvnd快速构建项目

    本文主要介绍了使用新版Maven-mvnd来快速构建项目,相比于Maven,mvnd可以显著提高构建速度,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • Java实现猜数字小游戏代码

    Java实现猜数字小游戏代码

    大家好,本篇文章主要讲的是Java实现猜数字小游戏代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Java中的锁分类的详细介绍

    Java中的锁分类的详细介绍

    这篇文章主要介绍了Java中的锁分类的详细介绍,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java中@ConditionalOnProperty注解使用

    Java中@ConditionalOnProperty注解使用

    在Spring Boot中,@ConditionalOnProperty注解是一种方便的工具,用于根据应用程序配置文件中的属性值来控制Bean的创建和加载,本文就来介绍一下Java中@ConditionalOnProperty注解使用,感兴趣的可以了解一下
    2023-11-11
  • 使用MAT进行JVM内存分析实例

    使用MAT进行JVM内存分析实例

    这篇文章主要介绍了使用MAT进行JVM内存分析实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论