当前位置: 首页 > 知识库问答 >
问题:

Spring AspectJ集成不工作

海灵均
2023-03-14

我试图使用Spring/AspectJ集成,但运气不好。Spring版本是3.2.17(是的,我知道有点旧)。

以下是我的相关配置:

pom.xml:

    <!-- Spring dependencies, including spring-aspects -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.7.4</version>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.7.4</version>
    </dependency>

应用程序上下文。xml:

<context:annotation-config/>
<aop:aspectj-autoproxy />
<bean id="loggingAspect" class="com.jason.app.web.util.logging.LoggingAspect" />    

spect.java(相关类):

@Aspect
public class LoggingAspect {

    private Logger log = LoggerFactory.getLogger(LoggingAspect.class);


    /**
     * Advice for before logging
     * @param joinPoint
     */
    @Before("execution(* com.jason.app.web.process..*(..))")
    private void beforeAdvice(JoinPoint joinPoint) {

        final String outputFormat = "intercept: executing method %s(%s)";
        final String method =joinPoint.getSignature().getName();

        List<?> argumentList = Collections.unmodifiableList(Arrays.asList(joinPoint.getArgs()));
        final String formattedArguments = argumentList.stream().map(s -> s.toString()).collect(Collectors.joining(", "));

        log.debug(String.format(outputFormat, method, formattedArguments));

    }
}

我倒了很多在线教程,运气不好。有人能指出我做错了什么吗?

杰森

共有3个答案

蒙峰
2023-03-14

将表达式更改为“execution(public*your.package.YourClass.yourMethod(..)”)之前的

羊舌洛华
2023-03-14

您可以再添加一个依赖项

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
</dependency>

试试,把你的切入点改成

@Before("execution(* com.jason.app.web.process..*.*(..))")

(意味着建议将应用于服务包或子包中定义的所有公共方法:com.jason.app.web.process)

连德水
2023-03-14

Spring配置标签

现在,如果希望使用AspectJ而不是Spring AOP,则需要在编译时编织或加载时编织之间进行选择。如果使用编译时编织,则需要将aspectj maven插件添加到构建中。如果选择加载时编织,则需要使用javaagent:path/to/aspectjweaver运行JVM。jarvm参数,如AspectJ文档中所述。

如果您需要让您的方面由Spring进行后处理(自动装配等),您需要将其列在您的Spring配置中。方面是在Spring之外创建的单例实例,因此您需要指定静态工厂方法aspectOf()来访问AsheJ运行时创建的aspectj的单实例。

<bean id="loggingAspect" 
    class="com.jason.app.web.util.logging.LoggingAspect" 
    factory-method="aspectOf"
/>

或注释方式:

@Configuration
public class AspectConfig {
    @Bean
    public LoggingAspect loggingAspect() {
        return LoggingAspect.aspectOf();
    }
}

不要忘记删除

 类似资料:
  • 我们希望使用logstash获取日志并将其传递给Kafka。 我们已经为logstash1.5.0beta1和kafka 2.9.2_0.8.1.1编写了以下conf文件 ** ** 运行以下命令后:bin/logstash代理-ftest.conf--logex.log test.conf是我们的conf文件。ex.log是我们为要存储的日志创建的空白文件。 我们得到以下输出 发送logstas

  • 当执行上面的代码时,将发生回滚,并且“Hibernate操作”将被回滚,但在TaskService.Complete中执行的操作不会被回滚。 我已经调试了Camunda代码,一切似乎都正常,我找到了一个SpringTransactionInterceptor,命令在中执行,此时事务处于活动状态。

  • 我正在使用这个库为二维码阅读器制作一个应用程序。当我单独制作一个演示时,它可以工作,但当我将它与OneSignal Sdk一起使用时,它不工作。下面是我的毕业代码: 下面是我从我的活动中调用qr码扫描仪的代码。 日志中出现的错误如下所示。 我们将非常感谢您的帮助。

  • 此代码用于向支付网关发送详细信息。当我使用规范形式的代码时,它工作得很好,但在PHP中与cURL一起使用时,它不工作,并给出“objectismoved”的结果。 我的问题有什么解决办法?如何在Transaction express网关中使用cURL进行支付转账? 以下是导致问题的代码:

  • 尽管我的测试方法被@WithMockUser注释,但我仍然被拒绝访问。为什么这在集成测试中不起作用?使用@webappconfiguration和mockmvc进行测试一切都很好。

  • 既然我们要把 vim 打造成 IDE,那必须得集成编译器、构建工具、静态分析器、动态调试器,当然,你可能还需要版本控制、重构工具等等,我暂时还好。 7.1 编译器/构建工具集成 先说下编译器和构建工具。vim 再强大也只能是个优秀的编辑器而非编译器,它能高效地完成代码编辑工作,但必须通过其他外部命令实现将代码转换为二进制可执行文件;一旦工程上规模,你不可能单个单个文件编译,这时构建工具就派上场了。