有一个Aspect类(@Aspect)哪些方面方法没有运行。 这是因为目标对象(org.services.myService)不在组件扫描列表中。的 servlet的context.xml中:
<context:component-scan base-package="org.controllers" />
<aop:aspectj-autoproxy />
如果添加包“org.services”,那么切入点 @Pointcut(“在(org.services.myService”)中就可以了。
问题无法更改servlet-context.xml中的组件扫描:
项目有一个单独的applicationContext.xml来扫描services文件夹,并且它有一个组件扫描。
在每次组件扫描后添加aspectj-autoproxy似乎不起作用 因为只找到在第一个组件扫描中扫描的bean(控制器)
此外,如果我在同一个文件夹上执行两次组件扫描(JBoss:为自动装配找到2个bean),以及由于项目结构而导致的其他原因(XML的混合允许它在JBoss和Jetty)。
如何在不更新上下文的情况下使myService类可用于aspect类:component-scan?
答案 0 :(得分:0)
使用spring-aop,你只能向spring bean申请建议,所以如果你没有用spring注册你的myService
bean,那么这个建议将不适用。该建议仅适用于从spring上下文获取的bean实例。
如果您无法更改组件扫描指令以包含该bean的包,您仍然可以在其中一个扫描包中添加配置类以实例化myService
并将其注册为弹簧豆。
package org.controllers;
@Configuration
public class MyServiceConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
或者将xml配置到你的一个spring xml配置中:
<bean class="org.services.MyService" />
答案 1 :(得分:0)
每个XML配置文件(应用程序上下文和servlet上下文)都需要创建创建方面的bean以及Aspect类。 我错过了组件扫描中的最新版本:
<context:component-scan base-package="org.services, org.aspects"/>
<aop:aspectj-autoproxy />
处理方面的每个XML(aspectj-autoproxy)需要在同一范围内拥有所需的所有bean。 (在这种情况下,通过组件扫描创建)。