Spring.net 间接调用被AOP拦截的方法失效(无法进入aop的拦截方法)
.下面的tx要定义
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database"
xmlns:tx="http://www.springframework.net/tx">
.启用事务切面和类型代理
<tx:attribute-driven transaction-manager="TxManager" proxy-target-type="true" />
.使用代理工厂或者自动代理时要有这个属性,我注释起来给大家看下
<!-- <property name="ExposeProxy" value="true"></property>-->,还有这个xml也相当于注册advisor
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database"
xmlns:tx="http://www.springframework.net/tx">
<object name="autoProxyCreator1" type="Spring.Aop.Framework.AutoProxy.ObjectNameAutoProxyCreator, Spring.Aop">
<property name="InterceptorNames" value="transactionInterceptor"/>
<property name="ExposeProxy" value="true"></property>
<property name="ObjectNames">
<list>
<value>*Service</value>
<value>*BLL</value>
<!--拦截目标对象-->
</list>
</property>
<property name="InterceptorNames">
<list>
<value>aroundAdvisor</value>
<value>throwAdvisor</value>
<value>prductGroupAdvisor</value>
<value>beforeAdvisor</value>
</list>
</property>
</object>
<!--<object id="aroundAdvisor" type="Spring.Aop.Support.NameMatchMethodPointcutAdvisor, Spring.Aop">
<property name="Advice" ref="AroundAdvise"/>
<property name="MappedNames">
<list>
<value>FindAll</value>
</list>
</property>
</object>-->
</objects>
.在间接调用有aop代理的方法的时候,这样写,虽然麻烦点但是有用,下面的saveorupdate方法是有用aop的
if (AopContext.CurrentProxy != null)
{
((dynamic)AopContext.CurrentProxy).SaveOrUpdate(obj);
}
else
{
SaveOrUpdate(obj);
}
.顺便给出aop方法特性的定义以及saveorupdate方法的定义
/// <summary>
/// 前置通知
/// </summary>
[AttributeUsage(AttributeTargets.Method, Inherited = true)]
public class BeforeInterceptorAttribute : Attribute
{
}
[BeforeInterceptor]
public override BasAssetClass SaveOrUpdate(BasAssetClass obj)
{
//这个名称已经被人用了,重复新增的时候
bool exits = GetTotalCount(x => x.AssetClassName == obj.AssetClassName && x.Id != obj.Id) > ;
if (exits)
{
throw new Exception("名称不能重复!!");
}
return base.SaveOrUpdate(obj);
}
.advisor具体定义的xml
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database"
xmlns:tx="http://www.springframework.net/tx">
<!--注意aroundAdvisor,aroundAdvisor1必须先在AopConfigInterceptor.xml注册-->
<object id="aroundAdvisor" type="Spring.Aop.Support.AttributeMatchMethodPointcutAdvisor, Spring.Aop">
<property name="Advice" ref="AroundAdvise"/>
<property name="Attribute"
value="AopBehavior.MethodInterceptorAttribute, AopBehavior" />
</object>
<object id="prductGroupAdvisor" type="Spring.Aop.Support.AttributeMatchMethodPointcutAdvisor, Spring.Aop">
<property name="Advice" ref="ProductGroupAroundAdvise"/>
<property name="Attribute"
value="AopBehavior.ProductGroupAttribute, AopBehavior" />
</object>
<object id="throwAdvisor" type="Spring.Aop.Support.AttributeMatchMethodPointcutAdvisor, Spring.Aop">
<property name="Advice" ref="ThrowsAdvise"/>
<property name="Attribute"
value="AopBehavior.ThrowExceptionAttribute, AopBehavior" />
</object>
<object id="beforeAdvisor" type="Spring.Aop.Support.AttributeMatchMethodPointcutAdvisor, Spring.Aop">
<property name="Advice" ref="BeforeAdvise"/>
<property name="Attribute"
value="AopBehavior.BeforeInterceptorAttribute, AopBehavior" />
</object>
<!--<object id="proxyFactoryObject" type="Spring.Aop.Framework.ProxyFactoryObject">
<property name="Target">
<object type="Bll.SysMenuOperationService, HRABLL" />
</property>
<property name="InterceptorNames">
<list>
<value>aroundAdvisor</value>
</list>
</property>
</object>--> </objects>
Spring.net 间接调用被AOP拦截的方法失效(无法进入aop的拦截方法)的更多相关文章
- .Net中的AOP系列之《间接调用——拦截方法》
返回<.Net中的AOP>系列学习总目录 本篇目录 方法拦截 PostSharp方法拦截 Castle DynamicProxy方法拦截 现实案例--数据事务 现实案例--线程 .Net线 ...
- SpringBoot CGLIB AOP解决Spring事务,对象调用自己方法事务失效.
对于像我这种喜欢滥用AOP的程序员,遇到坑也是习惯了,不仅仅是事务,其实只要脱离了Spring容器管理的所有对象,对于SpringAOP的注解都会失效,因为他们不是Spring容器的代理类,Sprin ...
- 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-使用工厂创建代理(Using the ProxyFactoryObject to create AOP proxies)
本文翻译自Spring.NET官方文档Version 1.3.2. 受限于个人知识水平,有些地方翻译可能不准确,但是我还是希望我的这些微薄的努力能为他人提供帮助. 侵删. 如果你正在为你的业务模型使用 ...
- 【Java EE 学习 51】【Spring学习第三天】【cglib动态代理】【AOP和动态代理】【切入点表达式】
一.cglib动态代理 1.简介 (1)CGlib是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口. (2) 用CGlib生成代理类是目标类的子类. (3 ...
- 【spring源码学习】spring的远程调用实现源码分析
[一]spring的远程调用提供的基础类 (1)org.springframework.remoting.support.RemotingSupport ===>spring提供实现的远程调用客 ...
- Spring进阶之路(10)-Advice简单介绍以及通过cglib生成AOP代理对象
Advice简单介绍 1. Before:在目标方法运行之前运行织入.假设Before的处理中没有进行特殊的处理.那么目标方法终于会运行,可是假设想要阻止目标方法运行时.能够通过抛出一个异常来实现.B ...
- Spring系列之aAOP AOP是什么?+xml方式实现aop+注解方式实现aop
Spring系列之aop aop是什么?+xml方式实现aop+注解方式实现aop 什么是AOP? AOP为Aspect Oriented Programming 的缩写,意识为面向切面的编程,是通过 ...
- Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例
利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...
- Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器
上一篇<更加简练的编程体验>提供了最新版本的Dora.Interception代码的AOP编程体验,接下来我们会这AOP框架的编程模式进行详细介绍,本篇文章着重关注的是拦截器的定义.采用“ ...
随机推荐
- 转 LoadRunner 技巧之 IP欺骗 (推荐)
IP欺骗也是也loadrunner自带的一个非常有用的功能. 需要使用ip欺骗的原因: 1.当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量 ...
- Kafka安装
一.下载kafka: http://kafka.apache.org/downloads 二.解压 tar -zxvf kafka_2.10-0.10.0.1.tgz 三.kafka需要用到zooke ...
- windows下多字节和宽字节转换
先简单说下什么是多字节和宽字节. 多字节是指使用多个字节(1-3)表示一个字符.比如gbk使用英文占一个字节,中文占2个,这个就是多字节了.utf-8是使用1-3个字节表示字符.还有big5等等. 宽 ...
- Sublime Text 3 配置Java开发
Sublime Text 3 配置Java开发 内嵌模式 在Sublime内部输出面板显示执行过程 配置JavaC - INSET.sublime-build 打开Sublime的包目录(选择菜单:P ...
- linux 学习 软件工具
_____secureCRT 远程通信工具 第二行第二个快速连接,输入主机名,即ip地址,和用户名,root .其它默认:端口22,协议ssh2,防火墙 none. 保存会话,连接.需要输入用户密码. ...
- maven依赖关系中Scope的作用
目前<scope>可以使用5个值: (1) compile (编译) compile是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范围.编译范围依赖在所有的classpat ...
- UE3 ExampleGame Android版无法运行解决方案
首先将 UE3\UnrealEngine3\UDKGame\Build\Android 文件夹 拷贝到 ExampleGame\Build下面.里面有相应的android 配置文件.xml 若果此时 ...
- VFP正则表达式判断是否是手机号码/电子邮件
正则表达式,可以理解为字符匹配或搜索技术 ,重要的是Pattern属性的写法. *--判断是否是手机号码Function isMobiPhoneLparameters cStroRegExp=Newo ...
- 用R实现全排列的分类
R 其实是个很好用的东东哦-最近写了个小函数,可以实现全排列数的枚举,代码如下: permut<-function(seq){ seq_len=length(seq); if(s ...
- JavaScript DOM编程艺术读书笔记(四)
第十章 实现动画效果 var repeat = "moveElement('"+elementID+"',"+final_x+","+fin ...