问题标签 [aop]

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.

0 投票
5 回答
2254 浏览

.net - 有关面向方面编程的帮助和信息

我是面向方面编程思想的新手,但我想探索在我的项目中使用它来处理日志记录、报告等的想法。为此,我有一些问题:

  • 为了这些有限的目的,我是否应该费心探索这条 AOP 路径?
  • 有哪些支持 AOP 的 .NET Framework 可用?
  • 这些框架中的哪一个支持流畅的界面(我讨厌 XML 配置):)
0 投票
2 回答
1711 浏览

java - 使用 OSGi 时是否可以进行字节码操作?

我正在制作一个应用程序服务器,在其中我需要使用一些字节码操作(例如,将自定义equalshashCode方法插入到带有注释的类中@Entity)。现在我给 JVM 一个 Java 代理(-javaagent选项),它使用ASM进行字节码转换。

我一直在考虑使用OSGi,但我不知道它是否允许我进行必要的字节码操作。

  1. 使用 OSGi 时是否可以进行字节码操作?如何?
  2. 捆绑包是否可以声明自己,它需要一些字节码操作才能工作?例如,应用程序服务器要求对它自己的一些核心类进行操作。
  3. 是否可以指定某个其他捆绑包需要一些字节码操作,而该捆绑包不知道它?例如,所有在服务器上运行的应用程序都必须被操纵,但应用程序不需要知道它。
  4. 捆绑包是否可以声明自己,所有依赖于它的捆绑包都必须进行字节码操作?这将使我很容易声明所有依赖于包含@Entity注释的 API 包的人都必须被操纵。
0 投票
1 回答
856 浏览

spring - 动态实现的 Spring 介绍

我正在尝试使用 Spring 框架为一个类(让我们称之为 C)动态实现一个特定的接口(让我们称之为 I)。在 Spring 中,这称为引入(其他语言中的 mixin)。在编译时,C 没有实现 I。使用 @DeclareParents 注释我可以在 AspectJ 语法中做到这一点。

问题是 I 的实际实现(我们称之为 IImpl)是独立的(不依赖于上下文)——我应该只在注释中提供 IImpl 类名。我想要实现的是以某种方式规定的实现。例如,我想为 IImpl 实例提供一个参数,比如封闭的 C 实例,以便 IImpl 中的逻辑会根据所引入的 CI 实例而有所不同。我需要一些方法来设置 IImpl 实例和引入的 C 实例之间的依赖关系。

目前我找不到办法做到这一点。有任何想法吗?

谢谢。

0 投票
1 回答
1470 浏览

nhibernate - 使用 NHibernate 在 Unity 拦截下从代理获取真实实例

我正在使用 Unity 为可插拔架构动态解析类型。我还使用拦截通过 AOP 应用业务规则验证(使用ValidationAspects)。最后,我使用 NHibernate 作为 ORM 来持久化域对象。

为了让 AOP 工作,我们使用VirtualMethodInterceptor, 因为接口拦截不适用于 NHibernate。我有一个外观ISession来处理存储库操作的接口和真实类型之间的转换。

为了确保通过 NHibernate 获取的图中的所有对象都为 AOP 正确代理,我做了一个 NHIInterceptor实现并覆盖了该Instantiate()方法,因此我可以为 NH 提供创建的对象而不是让它调用new(). 然后,我使用Container.Resolve()注入验证来取回代理对象,并将其返回给 NH 以填充。这工作正常。

当会话刷新发生时,问题就出现了。NHibernate 感到不安,因为它在图中看到的对象是代理类型而不是真实类型。如果我可以覆盖类型检查,我们映射的方式(所有通过属性,所有虚拟)NH 应该能够通过代理获取它需要的所有值。

我需要知道的是:给定由 Unity 创建并启用拦截的透明代理对象,是否有任何方法可以直接引用它正在代理的“真实”实例,或者 b) 覆盖 NH 并告诉它处理代理类型的对象,就好像它是已知的映射类型一样,在运行时动态?

0 投票
1 回答
125 浏览

aop - 有没有人使用过 AOP 来检测循环引用?

我不知道,这样你就可以抛出一个 CircularReferenceException?

0 投票
1 回答
817 浏览

aop - 编译时代码注入

最近,我一直在使用PostSharp。它是一个 AOP 框架,允许我们进行编译时代码注入。您可以只引用 PostSharp 程序集,在您的代码中使用它,编译后,您将获得一个已将所需代码注入其中的程序集。我试图找出 PostSharp 是如何将自己集成到 Visual Studio 的编译过程中并更改代码的,但直到现在还没有结果。

有没有办法让 Visual Studio 在编译期间或之后运行一些代码,而不使用项目的后期构建任务或任何插件?

0 投票
2 回答
4552 浏览

wcf - 如何使用 WCF 和 Unity 进行拦截

我有一个设置为托管在统一容器中的 WCF 服务。我打算使用这个容器来执行方法拦截。问题是我无法让我的拦截器开火......

首先在这里定义我的拦截器属性和处理程序:

在我的主机中,我尝试将其配置为使用拦截无济于事......帮助!!!!

我在这里做错了什么?

0 投票
3 回答
2972 浏览

java - 您会使用 AOP 进行数据库事务管理吗?

不久前,我编写了一个应用程序,它使用Spring AOP来定义哪些方法是事务性的。我现在正在重新考虑这是一个多么棒的主意。在一次小的重构(更改方法签名等)之后,我被击中了几次,这当然不会变得明显,直到实际出现问题(并且我有一个逻辑上不一致的数据库)。

所以我对一些事情感兴趣:

  1. 其他人是否决定恢复到显式事务管理(例如通过@Transactional注释)?
  2. 我可以在构建过程中使用有用的工具来帮助确定是否有任何东西被“破坏”了吗?
  3. 如果人们使用 AOP 来管理事务,他们会采取哪些步骤来避免我所犯的错误?

我正在使用 IntelliJ IDEA,它允许您浏览装饰方法,并将重构 SpringXML配置以及方法名称更改,但这并不总是足够的(例如,将参数添加到错误位置的方法会影响方面是否触发)

0 投票
1 回答
691 浏览

c++ - 是否可以在现有 C++ 程序中使用(某些)AOP 概念而无需完全重构?

我现在正在阅读 AOP,并想在我的代码中使用(一些)AOP 想法和方法。我没有任何第三方扩展,只有 MSVS 2005 环境。那么,是否有可能在我的日常工作中受益于 AOP 概念,而无需对现有代码进行完全重构(2 年的项目 x 5 名程序员)?

0 投票
5 回答
44482 浏览

.net - .Net 中 AOP 的最佳实现是什么?

在 C#、VB.net 中有很多 AOP 实现。这是一些 AOP 实现:

.Net 中 AOP 的最佳实现是什么?我应该使用什么?