gpt4 book ai didi

java - AOP Spring 方面方法未应用于目标对象

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:10 25 4
gpt4 key购买 nike

有一个方面类 (@Aspect),其方面方法未运行。这是因为目标对象 (org.services.myService) 不在组件扫描列表中。 servlet-context.xml:

<context:component-scan base-package="org.controllers" />
<aop:aspectj-autoproxy />

如果添加包“org.services”,则切入点@Pointcut("within(org.services.myService")起作用。

问题是无法更改 servlet-context.xml 中的组件扫描:

该项目有一个单独的 applicationContext.xml 来扫描服务文件夹,并且在那里它有一个组件扫描。

Adding aspectj-autoproxy after each component-scan seems not to work as only finds beans(controllers) scanned in first component-scan

此外,如果我在同一个文件夹上执行两次组件扫描(JBoss:找到用于 Autowiring 的 2 个 beans),以及由于项目结构而导致的其他原因(混合 XML 以允许其在 JBoss 和 Jetty 中运行),该项目将引发错误。

如何在不更新 context:component-scan 的情况下使 myService 类可用于方面类?

最佳答案

使用 spring-aop,您只能将建议应用于 spring bean,因此如果您不向 spring 注册您的 myService bean,则建议将不会被应用。该建议仅适用于您从 spring 上下文获取的 bean 实例。

如果您无法更改组件扫描指令以包含该 bean 的包,您仍然可以在扫描的包之一中添加一个配置类来实例化您的 myService 并将其注册为 spring bean。

package org.controllers;

@Configuration
public class MyServiceConfig {
@Bean
public MyService myService() {
return new MyService();
}
}

或者使用 xml 配置到您的 spring xml 配置之一:

<bean class="org.services.MyService" />

关于java - AOP Spring 方面方法未应用于目标对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47836993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com