2

我有一个具有以下切入点定义的方面

@Pointcut("execution(public de.company.project..* *(..))")

和包含以下内容的弹簧配置

<aop:aspectj-autoproxy />

<bean id="myaspect"
        class="de.company.project.impl.MyAspect" />

<bean id="someService" class="de.company.project.impl.SomeService" />

<bean name="/SomeService"
    class="org.springframework.remoting.caucho.HessianServiceExporter">
    <property name="service" ref="someService" />
    <property name="serviceInterface"
        value="de.company.project.interf.SomeService" />
</bean>

(真实配置中有多个服务)

我看到在某些方法中调用了方面,但不是全部。我怀疑(但还没有完全确定)只有直接在接口中声明的方法被包装在方面,而在超接口中声明的方法被忽略(尽管该接口应该匹配相同的切入点)。

这是预期的行为吗?我怎样才能改变它?还有什么可能发生的?

4

2 回答 2

2

答案是:我搞砸了切入点模式。看起来像这样

@Pointcut("execution(public de.company.project..* *(..))")

指定返回类型的包,而这

@Pointcut("execution(public de.company.project..*(..))")

指定具有该方法的类型的包。

我需要一个 Spring AOP 切入点解释

于 2011-03-16T09:14:25.230 回答
1

只是一个猜测。我没有证据证明这可能是您设置中的实际原因。

我知道 Spring AOP 不会拦截本地方法调用。即,如果同一个对象调用它自己的方法,即使它与切入点表达式匹配,所应用的代理也不会拦截调用。

编辑:另一个猜测。您确定所有相关类的实例都是 Spring 托管代码吗?您的代码的某些部分(或某些库)是否有可能在不使用 Spring 的情况下创建类的实例?如果发生这种情况,Spring AOP 无法拦截诸如 Spring AOP 仅围绕 Spring 管理的 bean 编织的 bean。

于 2011-02-28T12:21:33.083 回答