问题标签 [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.
.net - 有关面向方面编程的帮助和信息
我是面向方面编程思想的新手,但我想探索在我的项目中使用它来处理日志记录、报告等的想法。为此,我有一些问题:
- 为了这些有限的目的,我是否应该费心探索这条 AOP 路径?
- 有哪些支持 AOP 的 .NET Framework 可用?
- 这些框架中的哪一个支持流畅的界面(我讨厌 XML 配置):)
java - 使用 OSGi 时是否可以进行字节码操作?
我正在制作一个应用程序服务器,在其中我需要使用一些字节码操作(例如,将自定义equals
和hashCode
方法插入到带有注释的类中@Entity
)。现在我给 JVM 一个 Java 代理(-javaagent选项),它使用ASM进行字节码转换。
我一直在考虑使用OSGi,但我不知道它是否允许我进行必要的字节码操作。
- 使用 OSGi 时是否可以进行字节码操作?如何?
- 捆绑包是否可以声明自己,它需要一些字节码操作才能工作?例如,应用程序服务器要求对它自己的一些核心类进行操作。
- 是否可以指定某个其他捆绑包需要一些字节码操作,而该捆绑包不知道它?例如,所有在服务器上运行的应用程序都必须被操纵,但应用程序不需要知道它。
- 捆绑包是否可以声明自己,所有依赖于它的捆绑包都必须进行字节码操作?这将使我很容易声明所有依赖于包含
@Entity
注释的 API 包的人都必须被操纵。
spring - 动态实现的 Spring 介绍
我正在尝试使用 Spring 框架为一个类(让我们称之为 C)动态实现一个特定的接口(让我们称之为 I)。在 Spring 中,这称为引入(其他语言中的 mixin)。在编译时,C 没有实现 I。使用 @DeclareParents 注释我可以在 AspectJ 语法中做到这一点。
问题是 I 的实际实现(我们称之为 IImpl)是独立的(不依赖于上下文)——我应该只在注释中提供 IImpl 类名。我想要实现的是以某种方式规定的实现。例如,我想为 IImpl 实例提供一个参数,比如封闭的 C 实例,以便 IImpl 中的逻辑会根据所引入的 CI 实例而有所不同。我需要一些方法来设置 IImpl 实例和引入的 C 实例之间的依赖关系。
目前我找不到办法做到这一点。有任何想法吗?
谢谢。
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 并告诉它处理代理类型的对象,就好像它是已知的映射类型一样,在运行时动态?
aop - 有没有人使用过 AOP 来检测循环引用?
我不知道,这样你就可以抛出一个 CircularReferenceException?
aop - 编译时代码注入
最近,我一直在使用PostSharp。它是一个 AOP 框架,允许我们进行编译时代码注入。您可以只引用 PostSharp 程序集,在您的代码中使用它,编译后,您将获得一个已将所需代码注入其中的程序集。我试图找出 PostSharp 是如何将自己集成到 Visual Studio 的编译过程中并更改代码的,但直到现在还没有结果。
有没有办法让 Visual Studio 在编译期间或之后运行一些代码,而不使用项目的后期构建任务或任何插件?
wcf - 如何使用 WCF 和 Unity 进行拦截
我有一个设置为托管在统一容器中的 WCF 服务。我打算使用这个容器来执行方法拦截。问题是我无法让我的拦截器开火......
首先在这里定义我的拦截器属性和处理程序:
在我的主机中,我尝试将其配置为使用拦截无济于事......帮助!!!!
我在这里做错了什么?
java - 您会使用 AOP 进行数据库事务管理吗?
不久前,我编写了一个应用程序,它使用Spring AOP来定义哪些方法是事务性的。我现在正在重新考虑这是一个多么棒的主意。在一次小的重构(更改方法签名等)之后,我被击中了几次,这当然不会变得明显,直到实际出现问题(并且我有一个逻辑上不一致的数据库)。
所以我对一些事情感兴趣:
- 其他人是否决定恢复到显式事务管理(例如通过
@Transactional
注释)? - 我可以在构建过程中使用有用的工具来帮助确定是否有任何东西被“破坏”了吗?
- 如果人们使用 AOP 来管理事务,他们会采取哪些步骤来避免我所犯的错误?
我正在使用 IntelliJ IDEA,它允许您浏览装饰方法,并将重构 SpringXML
配置以及方法名称更改,但这并不总是足够的(例如,将参数添加到错误位置的方法会影响方面是否触发)
c++ - 是否可以在现有 C++ 程序中使用(某些)AOP 概念而无需完全重构?
我现在正在阅读 AOP,并想在我的代码中使用(一些)AOP 想法和方法。我没有任何第三方扩展,只有 MSVS 2005 环境。那么,是否有可能在我的日常工作中受益于 AOP 概念,而无需对现有代码进行完全重构(2 年的项目 x 5 名程序员)?
.net - .Net 中 AOP 的最佳实现是什么?
在 C#、VB.net 中有很多 AOP 实现。这是一些 AOP 实现:
- PostSharp
- 城堡动态代理
- 林福
- 织机网
- 方面.NET
- Enterprise Library 3.0 策略注入应用程序块
- AspectDNG
- DotSpect (.SPECT)
- Spring.NET Framework 作为其功能的一部分
- 巫术和Phx.Morph
- 特温特大学提供了针对 .NET 的 AOSD 解决方案的详尽分析
- Seasar.NET
- 方面#
- 拼图.NAspect
- 撰写*
- 设定点
- NConcern .NET AOP 框架
- ...
.Net 中 AOP 的最佳实现是什么?我应该使用什么?