- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我刚刚对 C# 中的 AOP 有了非常有趣的体验。我有一个返回类型为 List 的函数,它被拦截了,这一切都很好。然而,拦截器函数是一个验证器样式函数,可以通过调用并返回 bool 值 false 来阻止真正的函数。
所以代码看起来有点像这样:
List<Update> updates = Manager.ValidateAndCreate();
// protected void Save(List<Update> updates) { ....
Save(updates);
方法拦截器如下所示
public class ExceptionAdvice : AopAlliance.Intercept.IMethodInterceptor {
public object Invoke(AopAlliance.Intercept.IMethodInvocation invocation) {
if (isValid(invocation)) {
return invocation.Proceed();
} else {
return false;
}
}
private bool isValid( ...
}
现在验证失败后更新的值实际上是一个 bool 值而不是列表,我认为这里会有某种运行时错误但没有,所以:
updates.GetType().Name == "Boolean"
但是:
updates is bool == false
因此 save 仍将接受其更新的变异列表,并在您尝试使用它时稍后提示。
那么在像 C# 这样的类型安全语言中,这怎么可能呢?顺便说一句,这是 spring-aop。
编辑:此外,它确实可以编译并且确实有效,我现在已经逐步完成了几次。
最佳答案
我相信这是可能的,因为 Spring.Net 在运行时发出代理类,跳过编译时类型检查。
它本质上实现了一个装饰器模式包装原始类并动态生成一个新的方法实现。在动态生成的代理方法中,可以在编写 IL 时更改返回类型,而 .NET 允许这样做,因为它不会在运行时检查类型。当然在编译时它也仍然完全有效。这导致了上面相当奇怪的场景,即您的静态类型实际上与运行时类型不同。
以下是正确的,因为它正在检查实际的运行时类型,在某些情况下可以解析为 bool 值。
updates.GetType().Name == "Boolean"
但下面的代码失败了,因为它将变量的静态类型与 bool 值进行比较,而事实并非如此。
updates is bool == false
我建议您不要在 Invoke 中更改类型。
关于C# 和 AOP - AOPAlliance(面向方面的编程)这是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200572/
我正在使用 guice 通过 aop 进行依赖注入(inject) aopalliance 。我不太明白 aopalliance 到底是什么以及谁实现了他们的 sourceforge 页面上的版本(日
我正在使用 Tomcat 7 开发 Hibernate3 Spring3 项目启动器, 我正在努力解决这个 ClassNotFoundException - aopalliance 拦截器 Jar(这
我对 Spring 和 hibernate 完全陌生。我不知道我在哪里做错了。我在 eclipse 和 tomcat 中使用 spring 4.0.2 和 Hibernate 3。 项目结构:- 图书
我刚刚对 C# 中的 AOP 有了非常有趣的体验。我有一个返回类型为 List 的函数,它被拦截了,这一切都很好。然而,拦截器函数是一个验证器样式函数,可以通过调用并返回 bool 值 false 来
在AopAlliance的方法拦截中,有没有办法从被拦截的类中调用方法? 例如: public class MyClass { public void interceptMe() {}
尝试使用 Glassfish 和 NetBeans6.9.1 运行 RESTful 网络服务我一直收到这个异常...它似乎与 aopalliancce.jar 有关?注意不包括它我下载并添加了它...
我努力摆脱这个错误,但它不想离开我。 这是配置文件
我正在处理Spring AOP,我的代码是这样的 - @Component public class MyClass implements MethodInterceptor{ @Overri
我正在尝试使用 spring AOP 框架。编译的代码没有错误。当我尝试运行它时,出现了上述异常。我正在使用 netbeans IDE 8.0.1。我包含以下库和 jar 文件。 1) Spring
堆栈跟踪: Oct 24, 2014 8:12:04 AM org.springframework.context.support.ClassPathXmlApplicationContext pre
我正在尝试从此页面设置 spring AOP 示例: http://www.javabeat.net/articles/51-introduction-to-springs-aspect-orient
任何人都知道为什么添加注解驱动的声明会导致找不到联盟类。我没有明确定义编织,所以使用 Spring 默认值。 感谢任何帮助 最佳答案 Spring 有两种创建代理来支持事务的模式。默认模式是创建 JD
我正在构建一个启用了方法安全性的 spring 安全示例。在使用 methodSecurity 之前我没有得到任何错误,但是在我用 @PreAuthorize 注释注释方法之后我得到了这个错误 jav
我开始学习 Spring 和 hibernate,在配置项目依赖项时出现此错误。 nested exception is java.lang.NoClassDefFoundError: org/aop
我是一名优秀的程序员,十分优秀!