Java 支柱1和弹簧AOP

Java 支柱1和弹簧AOP,java,spring,aspectj,spring-aop,struts-1,Java,Spring,Aspectj,Spring Aop,Struts 1,我有一个使用Struts 1开发的应用程序,它需要一些听觉功能,所以我想要的是使用方面,所以我不需要更改类,而是“拦截”对方法的调用 我尝试使用SpringAOP+Aspectj集成,但首先我需要集成Struts和Spring。我一直在尝试一些教程和类似的问题,但显然它们主要是针对Struts 2的 更具体地说,我正在这样做: web.xml ... <listener> <listener-class>org.springframework.web.context.

我有一个使用Struts 1开发的应用程序,它需要一些听觉功能,所以我想要的是使用方面,所以我不需要更改类,而是“拦截”对方法的调用

我尝试使用SpringAOP+Aspectj集成,但首先我需要集成Struts和Spring。我一直在尝试一些教程和类似的问题,但显然它们主要是针对Struts 2的

更具体地说,我正在这样做:

web.xml

...
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
...
<context:component-scan base-package="com.app"/>
<context:annotation-config/>
<aop:aspectj-autoproxy />

<bean id="loggerAspect" class="com.app.util.LoggerAspect"/>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <!--  -->
    <!-- Spring AOP -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <!-- AspectJ -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.13</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.13</version>
    </dependency>
pom.xml

...
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
...
<context:component-scan base-package="com.app"/>
<context:annotation-config/>
<aop:aspectj-autoproxy />

<bean id="loggerAspect" class="com.app.util.LoggerAspect"/>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <!--  -->
    <!-- Spring AOP -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <!-- AspectJ -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.13</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.13</version>
    </dependency>

org.springframework
弹簧芯
5.0.2.发布
org.springframework
春季aop
5.0.2.发布
org.aspectj
aspectjrt
1.8.13
org.aspectj
aspectjweaver
1.8.13
我没有对struts config.xml文件做任何操作。服务器加载应用程序时没有任何问题,但是Spring没有加载,因此方面没有问题


你知道怎么解决这个问题吗

如果您想将AOP应用于遗留的非Spring应用程序,那么您不会仅仅因为springaop而引入Spring。您可以直接使用AspectJ,这里有几个选项:

  • 如果控制原始应用程序的生成,则使用AspectJ编译器编译原始应用程序,如果不:
  • 编译后二进制编织创建原始类文件的AOP增强副本。重新包装并使用它们,而不是原稿
  • 加载时编织:Java代理在类加载期间进行编织

AspectJ比SpringAOP强大得多,速度更快(没有代理),并且完全独立于Spring。这就是你想要使用的。

为了寻找答案,我找到了这篇文章,他们说:“SpringAOP不能为任何不是SpringFactory创建的东西添加方面”。所以我的理解是,我不能使用SpringAOP和Struts,因为我没有将类映射为bean。这是真的吗?我在Apple上下文中添加了我的类<代码> COMP.App.Action .FielAction < /C>作为一个bean,但仍然不能加载SelpHythyKeleAEX,这方面的概念非常方便,但是尽管我认为AspectJ本身的实现有点不切实际。我还在做一些测试,寻找过滤器之类的选项,所以我不依赖第三方。如果你认为这个概念“不切实际”,那么你到底为什么要问AspectJ问题,让人们花时间阅读和回答它?正如我所说,您的问题是SpringAOP,它将一个大框架引入到一个不需要它的遗留应用程序中。使用AspectJ并保持快乐。如果你学会正确地做这件事,没有什么是不切实际的。我不知道在不改变源代码或引入带有拦截器的大框架的情况下,如何在10分钟内将日志记录或跟踪添加到任何应用程序中。你试过了吗?如果是这样,请描述您的困难。至于依赖项:AspectJ只是一个JAR,请将其与Spring或任何其他框架进行比较。你真的想为你想引入的框架锁定供应商吗?这不是一种依赖吗?你的论点没有说服力。请不要误解我的意思,请再读一遍,因为我的意思是配置越简单越好,这就是我寻找Spring AOP的原因,否则这将不是处理方面的最常见方式。我还在测试,但如果我最终选择过滤器,这是基于servlet的,所以看,没有更多的依赖性。如果你找到解决问题的方法,这很好。但我仍然没有看到AspectJ的复杂性。你说你还在测试拦截器。使用AspectJ,您可以在30分钟内完成,根据我的经验,配置起来非常简单。无论如何,让我不要再浪费时间在这个问题上了。祝你好运。