AOP Spring 方面方法未应用于目标对象
AOP Spring aspect method not applied on target object
有一个方面 class (@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:找到 2 个用于自动装配的 beans)以及项目结构的其他原因(混合XML 允许 运行 在 JBoss 和 Jetty 中。
如何在不更新 context:component-scan 的情况下使方面 class 可以使用 myService class?
使用 spring-aop 你只能将建议应用到 spring beans,所以如果你不使用 spring 注册你的 myService
bean,建议将不适用。该建议将仅应用于您从 spring 上下文中获取的 bean 实例。
如果您无法更改组件扫描指令以包含该 bean 的包,您仍然可以在其中一个扫描包中添加配置 class 以实例化您的 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" />
每个 XML 配置文件(应用程序上下文和 servlet 上下文)需要创建在其上创建方面的 bean,以及方面 class。
我在组件扫描中遗漏了最新的一个:
<context:component-scan base-package="org.services, org.aspects"/>
<aop:aspectj-autoproxy />
每个处理方面 (aspectj-autoproxy) 的 XML 需要在同一范围内具有所有必需的 bean。 (在本例中,通过组件扫描创建)。
有一个方面 class (@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:找到 2 个用于自动装配的 beans)以及项目结构的其他原因(混合XML 允许 运行 在 JBoss 和 Jetty 中。
如何在不更新 context:component-scan 的情况下使方面 class 可以使用 myService class?
使用 spring-aop 你只能将建议应用到 spring beans,所以如果你不使用 spring 注册你的 myService
bean,建议将不适用。该建议将仅应用于您从 spring 上下文中获取的 bean 实例。
如果您无法更改组件扫描指令以包含该 bean 的包,您仍然可以在其中一个扫描包中添加配置 class 以实例化您的 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" />
每个 XML 配置文件(应用程序上下文和 servlet 上下文)需要创建在其上创建方面的 bean,以及方面 class。 我在组件扫描中遗漏了最新的一个:
<context:component-scan base-package="org.services, org.aspects"/>
<aop:aspectj-autoproxy />
每个处理方面 (aspectj-autoproxy) 的 XML 需要在同一范围内具有所有必需的 bean。 (在本例中,通过组件扫描创建)。