问题标签 [method-interception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
aop - 如何在 AspectJ AOP 中排除对内部方法的拦截?
我们正在将使用 Jboss AOP(基于代理)的应用程序迁移到带有编译时编织的 AspectJ AOP。但是,我们不希望内部方法被 AspectJ 拦截,但这似乎是 AspectJ 的默认行为。
关于如何在 Spring AOP 中拦截内部方法调用有多个帖子。但是,找不到任何与使用 AspectJ 排除内部方法相关的帖子。我们希望使用 AspectJ 编译时编织来实现它所承诺的运行时性能改进。
如果另一个类的方法调用下面类TestService中的任何公共方法,则该调用应该被拦截。但是,不应拦截从 method1() 到 method2() 的内部调用。我们只希望拦截器每个对象只拦截一次。
一个示例方面:
Spring AOP 中默认排除内部方法调用拦截的行为,因为它是基于代理的。有没有办法使用带有编译时编织的 AspectJ 来实现内部方法拦截的排除?
软件详情:Spring 版本:3.2.14。JDK版本:1.8。maven 插件 codehaus “aspectj-maven-plugin” 1.7 版用于进行编译时编织。
c# - C# 使用 AOP 在运行时将代码注入外部方法
我想将代码注入外部方法,而不编辑源代码。我已经可以替换当前方法来引用我自己的方法,因为动态替换 C# 方法的内容?.
我仍然需要能够在运行时修改外部方法体,这意味着能够在方法调用之前和方法调用之后注入代码。
我不能 手动调用我想修改的这个方法。是一个自己运行的服务。
我努力了:
- Reflection.Emit -> 但这会创建一个未被引用的新方法。
- Marshall ->
Marshal.GetFunctionPointerForDelegate
,然后将方法替换为之后调用编组函数 -> 不起作用,因为替换是指针并且 marhal 更改了指针。
情况:
.net - .NET 拦截 COM 方法调用
在写这篇文章之前,我就这个话题回答了 10 多个问题,以确保我没有遗漏明显的东西,但我找不到这个特定场景的答案。
我正在开发一个企业产品,它(非常不幸)继承了一些仍然在系统的几个部分中使用的旧 VB6 代码。我目前正在分析如何最好地确定实际使用了多少 VB6 代码,以便公司可以将战略迁移到 .NET。我想出了以下想法:
在使用 VB6 代码的地方,调用它的典型代码(VB.NET)如下所示:
我的想法是在 .NET 中构建一个外观,隐藏所有调用 COM 的代码,并在当前调用 COM 代码的所有位置调用外观抽象。换句话说:
...
CreateCOMObject 的实现将在内部调用 Server.CreateObject(comObject) 但它也会将此调用记录到数据库中。通过这种方式,我可以分析对所有 COM 对象的所有调用,并了解使用的和未使用的。然而,这还不够。我还需要了解从 COM 对象中调用了哪些方法和属性。出于这个原因,我需要了解是否有一种方法可以拦截 COM 对象的每个方法调用和属性。
谢谢你。
asp.net - .NET 和 Castle DynamicProxy - 如何检查一个拦截是否在另一个拦截“内部”
我有一个 AOP 审计库,它拦截使用 Castle DynamicProxy 和 Autofac 的方法,并检查它们是否具有此特定属性:
这是一种将通用实体添加到数据库的通用存储库方法。但是我在我的域层中也有特定的方法来做额外的事情,然后调用这些通用的存储库方法:
我的意图是,如果存在可审计的域方法(可以调用许多通用存储库方法),我的审计拦截器将仅审计此域方法,并将忽略通用存储库审计。但是如果我直接调用通用存储库方法,它们将被正常审计。
我尝试使用拦截器中的堆栈跟踪来实现此行为。以下方法检查堆栈帧数组是否已包含IInterceptor.Intercept方法。:
但这不起作用,因为我可以拦截一个方法而不审计它:
我不想使用所有当前拦截的方法来管理静态集合,因为我希望这个 AOP 库可以处理多种类型的项目(Web API、Windows 服务、控制台应用程序、WPF 等),并且每种类型都有自己的方式管理静态实例。例如,在 Web API 上下文中,我不希望两个 HTTP 请求共享此静态集合。在 Windows 服务中,我不想在两个执行线程之间共享这个静态集合。
你们知道管理这种多级拦截的更好方法吗?您是否知道任何可以在许多项目类型中发挥良好作用的良好实践?
vue.js - 有没有办法拦截vue中的一个事件,以后再继续呢?
我想实现一些我在各个网站上多次看到的东西。我将提供一个场景,以便更容易理解我想要实现的目标。假设我有一个执行文件下载的按钮。有时这个按钮可能有额外的事件来打开一个带有一些信息的模态,在这个模态中单击“继续”后,应该触发下载事件,就好像它没有这个拦截一样。该模式中可能还有一个取消按钮,它将取消下载操作。我怎样才能做到这一点?我已经使用 jquery 实现了这个,但现在我正在修改我的项目以使用 vue,而我用 jquery 实现它的方式非常肮脏、hack-ish 和不稳定。
c# - 获取添加到代理方法的 InterfaceInterceptorBehaviour 列表以及如何确认所有行为的 Invoke 方法在 c# 中执行
我们使用 InterfaceInterceptor 创建一个代理,并根据条件向代理添加一些拦截行为。现在我们要检查添加到代理的拦截行为列表。有没有办法做到这一点?
其次,我们还想验证所有添加的代理的调用方法是否正在执行。
c++ - 如何在c++中修改核心代码之外的方法
我有一个我不想破解的核心代码。在 GitHub 的帮助下,C++ 中有大约 30 个对象进行了更新。
我的软件采用这段代码并实现了很多东西并改变了其他东西。如果此代码在另一个名称空间或文件夹中可用,我需要做的是以某种方式使用类和方法,否则使用原始代码。
此外,我无法更改核心(main 除外)。
我的目标是拥有一个具有相对性可维护性的有组织的代码结构。
例子:
在此示例中,我希望链接器动态查找命名空间“hack”和类“foo2”中是否存在方法“fun3”,如果为真,请使用它,如果没有,请在命名空间“core”中尝试。“foo1”中的“fun2”也一样。
因此,输出应该是:
请记住,我不想破解核心(也许只是主要功能),所有这些都在代码之外。这是某种拦截。我不知道要搜索什么。我尝试过的所有条款都没有得到任何结果。我也不知道是否可以使用多态性。另一个问题是编译器在文件中找不到某些方法,它可能会发现一些错误(对于命名空间hack中的被黑类)。我知道在 PHP 中有一种方法可以做到这一点。