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拦截参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringCloud openfeign相互调用实现方法介绍
在springcloud中,openfeign是取代了feign作为负载均衡组件的,feign最早是netflix提供的,他是一个轻量级的支持RESTful的http服务调用框架,内置了ribbon,而ribbon可以提供负载均衡机制,因此feign可以作为一个负载均衡的远程服务调用框架使用2022-11-11springboot+redis实现微博热搜排行榜的示例代码
本文主要介绍了springboot+redis实现微博热搜排行榜的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-05-05SpringBoot项目War包部署无法注册到Nacos中的解决
这篇文章主要介绍了SpringBoot项目War包部署无法注册到Nacos中的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01关于Shiro过滤器配置方式(ShiroFilterFactoryBean)
这篇文章主要介绍了关于Shiro过滤器配置方式(ShiroFilterFactoryBean),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12
最新评论