在其他 JAR 中定义时 Spring Aspect 未执行

2023-11-25

我有一个由两个子项目组成的项目,这两个子项目都是 Spring 项目,并且每个子项目都有一个 applicationContext.xml 。

一种是框架项目(最终作为 JAR),另一种是实际应用程序(最终作为 WAR 并依赖于 JAR,并将 JAR 的 applicationContext.xml 导入到它自己的 applicationContext.xml 中)。

在框架项目中,我为所有公共方法定义了一个方面。

@Aspect
@Configurable
public class MyAspect {

    @Autowired
    private SomeBean mBean;

    @Pointcut("execution(public * *(..))")
    public void anyPublicMethod() {
    }

    @Before("anyPublicMethod()")
    public void checkAuthorization(JoinPoint pJoinPoint) {
        mBean.doSomething();
    }
}

我已经在框架的applicationContext.xml中激活了AOP(它是由实际应用程序项目的applicationContext.xml导入的)。

...
    <context:spring-configured />

    <context:component-scan base-package="com.mypackage" />

    <aop:aspectj-autoproxy/>
...

在框架项目中进行测试时,在调用 Spring bean 上的公共方法时,方面会按预期执行。

如上所述,框架项目作为依赖项包含在应用程序项目中,但在任何 Spring bean 上的应用程序项目中调用匹配方法(任何公共方法)时,不会执行该方面。

我还尝试过使用该方面的 XML 配置。这会导致相同的行为。


恕我直言,您可以稍微调整一下方法。

我要做的第一件事是将战争的应用程序上下文的配置委托给 web.xml :

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/classes/spring*.xml</param-value>
</context-param>

其次,我将在您的 war 文件的应用程序上下文中启用 aop,因为这是您想要使用它的地方。目前看来,您正在使用 aop 配置导入应用程序上下文,只是为了将其放入您的 Web 项目中,这可能是错误的。

最后,我假设这些是运行时而不是编译方面,在后一种情况下,无论依赖关系如何,您都需要在您的战争项目中使用aspectj重新编译。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在其他 JAR 中定义时 Spring Aspect 未执行 的相关文章

随机推荐

  • 使用 Java 进行 ElasticSearch 聚合

    我想在我的 java 应用程序中进行聚合 首先 我使用curl 构建了REST 查询 它看起来像 curl XGET localhost 9200 analysis search pretty H Content Type applicat
  • 根据设备(iPhone 或 iPad)不同的设备方向

    我正在开发一个具有以下要求的通用项目 对于 iPhone 我只想要纵向 对于 iPad 仅限风景 我该怎么做iOS 8 迅速 在我看来 按照 ScarletMerlin 的建议 更改 info plist 中的键是满足我必须满足的要求 每种
  • 英特尔编译器 (C++) 在 std::vector 上减少 OpenMP 问题

    从OpenMP 4 0开始 支持用户定义的缩减 所以我在 C 中准确地定义了 std vector 的减少here 它在 GNU 5 4 0 和 GNU 6 4 0 上运行良好 但在 intel 2018 1 163 上它会返回随机值以进行
  • 模块在 Perl 核心中存在多久了?

    我实际上感兴趣的模块是 Sys Hostname 但作为一个更普遍的问题 我如何知道特定模块成为核心模块多久了 我对 Perl 版本很好奇 Would 模块 核心列表 help 从 Perl 内部 print Module CoreList
  • 如果 Spark 数据帧特定列中的所有条目均为空,则删除

    使用 Pyspark 我如何选择 保留所有columns包含非空值的 DataFrame 或等效地删除所有不包含数据的列 编辑 根据 Suresh 请求 for column in media columns if media select
  • Rails has_many :通过连接模型中的额外属性查找

    Ruby 和 Rails 都是新手 但我现在已经接受了书本教育 这显然没有任何意义 哈哈 我有两个模型 事件和用户通过表 EventUser 加入 class User lt ActiveRecord Base has many event
  • 将 pyodbc 游标结果输出为 python 字典

    如何序列化 pyodbc 游标输出 来自 fetchone fetchmany or fetchall 作为 Python 字典 我正在使用 Bottlepy 并需要返回 dict 以便它可以将其作为 JSON 返回 如果您事先不知道列 请
  • 将整数转换为位

    我有字节到二进制字符串的函数 std string byte to binary unsigned char byte int x 128 std ostringstream oss oss lt lt byte 255 0 for int
  • 我如何获得可用的时区(android:settings)

    我想要得到时区 我可以在设置中看到 日期和时间 gt 是的 我知道 在 java android 中可以通过以下方式获取所有时区TimeZone getAvailableIDs 但我只想获取存在于的时区 正如您所注意到的 可以获得所有的列表
  • r - 如何在多个面板中绘制图文

    I was trying to plot dynamic graph in different panels as it could be done on the website using group such as 但它应该是动态的使用
  • Java 中的“final”关键字如何工作? (我仍然可以修改对象。)

    在Java中我们使用final带变量的关键字指定其值不可更改 但我发现您可以更改类的构造函数 方法中的值 同样 如果变量是static那么就是编译错误 这是代码 import java util ArrayList import java
  • 如何重新排列数组项,将依赖项移动到顶部?

    我有以下内容array其中每一项可能 或可能不依赖于 另一项 test array c gt array depends gt b a gt array b gt array depends gt a d gt array depends
  • 即使运行 npm install 后,npm Gulp 依赖项也丢失

    我有一个使用 Gulp 的项目 我将项目部署到 Ubuntu 服务器上 现在想要编译资产 这是我的 gulpfile 目前所做的全部工作 安装 Node 和 npm 后我运行npm install从我的项目的根目录安装依赖项 package
  • 如何使用反应选择来自定义渲染每个下拉项下方的子文本?

    我试图弄清楚如何利用反应选择中的自定义组件来渲染包含带有潜文本的项目的下拉列表 我查看了以下每个组件 https react select com components并且不确定哪一个最适合我的需求 从组件列表来看 我相信option组件的
  • 从地理坐标获取时区的算法

    我想编写应用程序 用户可以在地图上指向任何地方 不仅是城市 并获取该地方的时区 我应该使用什么数据结构 应用程序没有互联网连接 和算法 我在哪里可以获得所需的数据 我不会比将地图划分为 24 个矩形更准确 我将用 Java ME 编写我的应
  • CMake:设置目标源目录

    我有一个 C 项目 其中所有实现源文件 cpp 都驻留在src项目目录中的目录 某些文件位于其他子目录中 假设有 50 个文件src foo 我需要将这些文件列为add library和 或target sources功能 现在 无论在哪里
  • 如何让我的 Spring-JUnit 测试认为它在 GenericApplicationContext 中运行?

    我在用着Spring 3 2 6 RELEASE JUnit 4 11 and DWR 3 0 0 rc2 我的问题是 当运行 Spring JUnit 集成测试时 如何模拟在org springframework context supp
  • hadoop中有超过120个计数器

    Hadoop 计数器大小有限制 默认为 120 我尝试使用配置 mapreduce job counters limit 来更改它 但它不起作用 我看过源代码 就像 org apache hadoop mapred Counters 类中的
  • 如何重新映射 CoC VIM 自动完成键?

    我正在尝试将自动完成键从 Enter 键重新映射到 TAB 因为当我打算转到下一行时 我会继续自动完成 下面的代码是 coc 的默认选项 我认为这是我应该能够重新映射密钥的地方 make
  • 在其他 JAR 中定义时 Spring Aspect 未执行

    我有一个由两个子项目组成的项目 这两个子项目都是 Spring 项目 并且每个子项目都有一个 applicationContext xml 一种是框架项目 最终作为 JAR 另一种是实际应用程序 最终作为 WAR 并依赖于 JAR 并将 J