Java springaop@annotation切入点与xml配置

Java springaop@annotation切入点与xml配置,java,spring,aop,aspectj,Java,Spring,Aop,Aspectj,我可以使用@annotation使用基于SpringXML的配置定义切入点,还是只有在使用注释定义切入点时它才起作用? 这样行吗 <aop:pointcut id="inPreparedStatementLoggingMethod" expression="@annotation(com.blah.dao.LogPreparedStatement)"/> 带注释的方法位于抽象的Springbean中。我可以建议抽象Springbean中的方法吗 <bean id="bas

我可以使用
@annotation
使用基于SpringXML的配置定义切入点,还是只有在使用注释定义切入点时它才起作用? 这样行吗

<aop:pointcut id="inPreparedStatementLoggingMethod" expression="@annotation(com.blah.dao.LogPreparedStatement)"/>

带注释的方法位于抽象的Springbean中。我可以建议抽象Springbean中的方法吗

<bean id="baseSqlDao" class="com.blah.dao.BaseSqlDao" abstract="true">
  <description>Abstract super-class for most of the database access objects</description>
  <property name="sqlMapClient" ref="sqlMapClient"/>
</bean>

大多数数据库访问对象的抽象超类
我还有一些其他的切入点和方面正在工作,但是在这个方面的方法中它从来没有碰到断点

<aop:aspect id="preparedStatementLoggingAspect" ref="methodProfileAspect">
  <aop:around method="doPreparedStatementLogging" pointcut-ref="inPreparedStatementLoggingMethod"/>
</aop:aspect>

即使我放弃只建议带注释的方法,并尝试建议抽象Springbean中的所有方法,它仍然没有达到断点。这让我怀疑它不能与抽象bean一起工作,因为我还有其他类似定义的切入点可以工作

<aop:pointcut id="inBaseSqlDaoMethod" expression="within(com.blah.dao.BaseSqlDao)"/>
<aop:aspect id="preparedStatementLoggingAspect" ref="methodProfileAspect">
  <aop:around  method="doPreparedStatementLogging"  pointcut-ref="inBaseSqlDaoMethod"/>
</aop:aspect>


我在日志中找不到任何错误。Spring或AspectJ中是否有任何日志记录类别需要切换到调试级别以进一步研究?

带注释的目标方法是否在具体的子类中被重写?“我问的是一个具体的原因。不,他们没有被推翻,”克里加克斯说。所有的实现都在抽象bean中,但没有一个是
final
。好吧,那么问题不是人们期望接口或基类的方法注释被实现类或子类继承的典型错误,这是错误的假设。在这种情况下,我要求您尝试一下它是否与注释样式的方面语法一起工作,以便自己回答问题,或者发布一个帖子,以便您的助手能够重现您的问题。我不想自己发明一个完整的样品。谢谢,@kriegaex。在写一篇MCVE时,我意识到了问题的原因。超类中建议的方法是从具体类中的方法调用的。当Springbean调用它自己的一个方法时,不会建议使用该方法。我不应该扩展抽象bean,但它应该是具体bean的依赖项。当然,通过
this.myMethod(…)
调用在基于代理的框架(如Spring AOP)中不起作用。如果这是一个必须具备的需求,那么您必须切换到AspectJ(可以通过LTW在Spring中使用,LTW有很好的文档记录)。附言:创建MCVE的美妙之处在于,在隔离问题时,您往往能更好地理解问题。我在这里见过很多这样的案例,当人们意识到自己在准备我要求的MCVE时出了什么问题时