spring aop切面表达式详解及例子

spring aop切面表达式详解及例子,第1张

切面类型

execution格式

通配符

例子

一、 execution :使用“ execution (方法表达式)”匹配方法执行;

二、 within :使用“ within (类型表达式)”匹配指定类型内的方法执行;

三、 this :使用“ this (类型全限定名)”匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口方法也可以匹配;注意this中使用的表达式必须是类型全限定名,不支持通配符;

四、 target :使用“ target (类型全限定名)”匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;注意target中使用的表达式必须是类型全限定名,不支持通配符;

五、 args :使用“ args (参数类型列表)”匹配当前执行的方法传入的参数为指定类型的执行方法;注意是匹配传入的参数类型,不是匹配方法签名的参数类型;参数类型列表中的参数必须是类型全限定名,通配符不支持;args属于动态切入点,这种切入点开销非常大,非特殊情况最好不要使用;

六、 @within :使用“ @within (注解类型)”匹配所以持有指定注解类型内的方法;注解类型也必须是全限定类型名;

七、 @target :使用“ @target (注解类型)”匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;注解类型也必须是全限定类型名;

八、 @args :使用“ @args (注解列表)”匹配当前执行的方法传入的参数持有指定注解的执行;注解类型也必须是全限定类型名;

九、 @annotation :使用“ @annotation (注解类型)”匹配当前执行方法持有指定注解的方法;注解类型也必须是全限定类型名;

十、 bean :使用“ bean (Bean id或名字通配符)”匹配特定名称的Bean对象的执行方法;Spring AOP扩展的,在AspectJ中无相应概念;

我没看过代码。但是要实现这个也不难:

通过反射知道了对象一共有哪些注解,装在一个 Map 中,

然后通过 Map 反过来,再通过注解找对象。

注解方式实现AOP是在20后出现的。。貌似叫Spring-AspectJAOP在通知类里面写各个通知方法。根据需求在相应方法上面添加注解标记比如@Before(这里写切入点)切入点有两种语法方式execution()和within()然后在配置文件配置

@Retention :注解的作用域,包含RetentionPolicy参数

@Inherited :允许子类继承父类的注解

@Documented :此注解会包含在javadoc中

RedisTemplate对象的配置

切面类

获取web对象工具

测试接口

正常访问:

限流:

1、@Transactional使用位置

Ⅰ 写在接口类上,该接口的所有实现类的所有方法都会有事务;

Ⅱ 写在接口方法上,该接口的所有实现类的该方法都会有事务;

Ⅰ 写在实现类上,该类中的所有方法都会有事务;

Ⅱ 写在实现类方法上,该方法上有事务。

建议:写在实现类或实现类的方法上。

2、PlatformTransactionManager

PlatformTransactionManager是Spring中的事务管理接口,具体如下:

3、DataSourceTransactionManager

Spring中JDBC事务管理实现类是DataSourceTransactionManager,所以我们使用MyBatis时,如果需要进行事务管理则配置该事务管理即可。

1、基础准备

jdbcproperties如下:

JdbcConfig如下:

2、测试

1、相关注解

配置类注解,定义在配置类上。

设置当前Spring环境中开启注解式事务支持。

接口、类、方法注解,定义在接口、类、方法上。

为当前业务层方法添加事务(如果设置在类或接口上方则类或接口中所有方法均添加事务)。

2、事务角色

发起事务方,在Spring中通常指代业务层开启事务的方法。

加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法。

3、@Transactional常用属性

true只读事务,false读写事务,增删改要设为false,查询设为true。

设置超时时间单位秒,在多长时间之内事务没有提交成功就自动回滚,-1表示不设置超时时间。

当出现指定异常进行事务回滚。

4、事务传播行为

比如上述测试案例中,我们给log方法上的@Transactional设置了传播属性为REQUIRES_NEW,表示当前事务协调员会自己开启一个事务。并不会因为transfer发生回滚而回滚。

Ⅰ REQUIRED(默认);

Ⅱ SUPPORTS;

Ⅲ MANDATORY;

Ⅳ REQUIRES_NEW;

Ⅴ NOT_SUPPORTED;

Ⅵ NEVER;

Ⅶ NESTED。

以上即为Spring AOP-事务管理的全部内容,感谢阅读。

以上就是关于spring aop切面表达式详解及例子全部的内容,包括:spring aop切面表达式详解及例子、java 自定义注解 反向获取问题、spring 注解aop切入点表达式怎么排除某些方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9575054.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存