上次谈到spring的aop无法拦截内部方法调用时,解决方案之一是重新获取代理类调用B方法。
下面说一下如何获取到代理bean。
1、如果知道beanName直接通过上下文获取到bean。
2、如果不知道beanName,则可以放在线程变量中,如下:
在action中调用时可以先调用spring提供的接口AopContext.setCurrentProxy(proxy)。
该接口原理就是将代理bean放到线程变量中
public abstract class AopContext { private static final ThreadLocal<Object> currentProxy = new NamedThreadLocal<Object>("Current AOP proxy"); public static Object currentProxy() throws IllegalStateException { Object proxy = currentProxy.get(); if (proxy == null) { throw new IllegalStateException( "Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to make it available."); } return proxy; } static Object setCurrentProxy(Object proxy) { Object old = currentProxy.get(); if (proxy != null) { currentProxy.set(proxy); } else { currentProxy.remove(); } return old; } }
当需要调用时,则调用接口((BeanClass) AopContext.currentProxy()).B();
如果在配置中将expose-proxy设置为true,则直接获取就可以了:
<aop:config expose-proxy="true"><!—xml风格支持-->
相关推荐
spring声明事务的配置 spring声明事务的配置 spring声明事务的配置
Spring事务失效Spring事务失效
Java高级编程 实验报告 spring 声明事务 实验目的 掌握spring 声明式事务管理配置 实验环境 本实验采用本实验采用的eclipse或者 Myeclpse开发工具。Spring 4.0以上 Jdk1.7以上、oracle/mysql。
Spring声明式事务管理失效的原因,这里面是日常工作中踩过的坑,事务失效所产生的影响比较隐蔽,测试时易忽略,大多是在线上暴露,这可能是对Spring管理下的信任吧
使用spring+springMVC 组合开发,声明式事务失效
spring声明式事务实例 可复制修改使用。。。。。。。。。。
Spring声明式事务配置管理方法
Spring 声明式事务和Spring 编程式事务
Spring源代码解析(六):Spring声明式事务处理.doc
spring声明式事务处理demo。myeclipse工程
<?xml version="1.0" encoding="UTF-8"?><beansxmlns=...
本代码使用H2内存数据库演示spring事务使用,包括编程式事务,声明式事务@Transactional使用,自定义事务事务注解实现自定义事务管理器
spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码spring学习事务源码
1. 基于Aspectj实现动态数据源...6. 实现事务内切换数据源(支持原生Spring声明式事务哟,仅此一家),并支持多数据源事务回滚(有了它除了跨服务的事务你需要考虑分布式事务,其他都不需要,极大的减少了系统的复杂程度)
NULL 博文链接:https://babalaaaa.iteye.com/blog/538687
spring+mybatis的声明式事务
Spring中事务的传播属性详解,Spring中事务的传播属性详解
Spring事务管理Demo
Spring+Hibernate 使用TransactionInterceptor声明式事务配置