AOP使用的是动态代理的机制,它会给类生成一个代理类,事务的相关操作都在代理类上完成。内部方式使用this调用方式时,使用的是实例调用,并没有通过代理类调用方法,所以会导致事务失效。

解决办法

方式一 引入自身bean对象

在类的内部@AutoWired将本身的bean注入,然后通过注入的bean调用方法,从而实现使用AOP代理的操作。

//注入自身bean

@Autowired
@Lazy
private ****Service service; //通过service调用自身方法 public void invoke(){
//this.execute();
//使用注入对象替代this调用
service.execute();
}

  

方式二 通过ApplicationContext引入bean对象

通过ApplicationContext获取bean,通过bean调用内部方法,就使用了bean的代理类。

@Autowired
private ApplicationContext applicationContext; //通过applicationContext获取bean对象
public void incoke(){
((****Service)applicationContext.getBean("****Service")).execute():
}

  

方式三 引入AopContext获取当前类的代理类

通过AopContext获取当前类的代理类,直接通过代理类调用方法。

//在引导类上添加该注解
@EnableAspectJAutoProxy(exposeProxy=true) public void invoke(){
((***Service)AopContext.currentProxy()).execute();
}

  

Spring 内部方法调用失效问题(AOP)的更多相关文章

  1. Spring的Bean内部方法调用无法使用AOP切面(CacheAble注解失效)

    Spring的Bean内部方法调用无法使用AOP切面(CacheAble注解失效) 前言 今天在使用Spring cache的Cacheable注解的过程中遇见了一个Cacheable注解失效的问题, ...

  2. Spring EL方法调用实例

    Spring表达式语言(使用SpEL)允许开发人员使用表达式来执行方法和将返回值以注入的方式到属性,或叫作“使用SpEL方法调用”. Spring EL在注解的形式 了解如何实现Spring EL方法 ...

  3. Spring AOP无法拦截内部方法调用

    当在同一个类中,A方法调用B方法时,AOP无法工作的问题 假设一个接口里面有两个方法: package demo.long; public interface CustomerService { pu ...

  4. SpringBoot 内部方法调用,事务不起作用的原因及解决办法

    在做业务开发时,遇到了一个事务不起作用的问题.大概流程是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚.查阅资料后,问题得到解决,记录下来分享给大家. 场景 我在这里模拟一个场景 ...

  5. AOP方法增强自身内部方法调用无效 SpringCache 例子

    开启注解@EnableCaChing,配置CacheManager,结合注解@Cacheable,@CacheEvit,@CachePut对数据进行缓存操作 缺点:内部调用,非Public方法上使用注 ...

  6. 线程基本使用--Thread内部方法调用start

    一个问题,下面的代码会如何运行 public class TraditionalThread { public static void main(String[] args) { System.out ...

  7. laravel PC内部方法调用

    /** * [api 内部请求] * @author Foreach * @param string $method [请求方式] * @param string $url [地址] * @param ...

  8. spring声明式事务 同一类内方法调用事务失效

    只要避开Spring目前的AOP实现上的限制,要么都声明要事务,要么分开成两个类,要么直接在方法里使用编程式事务 [问题] Spring的声明式事务,我想就不用多介绍了吧,一句话“自从用了Spring ...

  9. spring声明式事务 同一类内方法调用事务失效(转)

    原文 https://blog.csdn.net/jiesa/article/details/53438342 [问题] Spring的声明式事务,我想就不用多介绍了吧,一句话“自从用了Spring ...

随机推荐

  1. 201771010113 李婷华 《面向对象程序设计(Java)》第八周总结

    一.理论知识部分 1.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个接口. 2.在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.接口 ...

  2. Web(4)servlet

    一.servlet.GenericServlet.HttpServlet 1.servlet具有四个生命周期方法 特性:单例模式,线程不安全,效率高 2.servletConfig接口对应根元素对应的 ...

  3. 批量下载B站视频

    一个一个下载:https://www.zhihu.com/question/41367609 WSDAB的回答批量下载:https://www.zhihu.com/question/49793759( ...

  4. PHP对象基础

    class demo1 { public function test1(){ echo '这是一个公有方法,可以随意调用!' } protected function test2(){ $this-& ...

  5. android关机流程

    关机过程的主要实现在ShutdownThread.java中在关机过程中,主要做了三件事:1.发送关机广播 有的模块可能需要监听手机关机事件,所以在关机时发送关机广播,通知相关模块处理.2.关闭一些主 ...

  6. python实现摇骰子猜大小函数升级没把加注及三大运行商短信验证过滤

    摇骰子游戏升级 此次更改增加下注功能,启动资金1000元,每次赔率都是一倍,钱输光退出. 源码: #!/user/bin/env python #-*-coding:utf-8 -*- #Author ...

  7. HBase Filter 过滤器之 ValueFilter 详解

    前言:本文详细介绍了 HBase ValueFilter 过滤器 Java&Shell API 的使用,并贴出了相关示例代码以供参考.ValueFilter 基于列值进行过滤,在工作中涉及到需 ...

  8. ORACLE重做日志小结

    1.Redo log特点 重做日志以磁盘I/O为主,将数据库操作记录到日志文件.(磁盘I\O性能有可能成为瓶颈) 每个实例只有一个活动的LGWR(log writer)进程,至少有两个日志组(logf ...

  9. 【Python代码】混合整数规划MIP/线性规划LP+python(ortool库)实现

    目录 相关知识点 LP线性规划问题 MIP混合整数规划 MIP的Python实现(Ortool库) assert MIP的Python实现(docplex库) 相关知识点 LP线性规划问题 Linea ...

  10. MySQL事务及实现、隔离级别及锁与优化

    事务  事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.事务是逻辑上的一组操作,要么都执行,要么都不执行. ACID简介 原子性(Atomicity) ...