我有一个spring soap web服务,我想使用自定义日志记录方面来测量它的性能。该方面对于普通的spring bean工作正常,但是对于Endpoint-invokeInternal方法没有被调用。spring中对于相同的受保护方法是否有任何限制...?感谢任何帮助来让它工作?
代码示例:
@Component
@Aspect
public class AspectLogging {
@Around(value = "execution(* *(..)) && @annotation(logTime)", argNames = "logTime")
public Object logAround(ProceedingJoinPoint joinPoint, LogTime logTime) throws Throwable {
// Time logging goes here...
}
}
Spring上下文:
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!-- Aspect -->
<bean id="aspectLog" class="com.x.y.AspectLogging" />
Spring WS端点:
public class MyEndPoint extends AbstractJDomPayloadEndpoint {
@LogTime
protected Element invokeInternal(Element request) throws Exception {
// Service call goes here...
}
}
更新:在将访问修饰符改为public之后,它工作了,这是否意味着Spring允许AOP只适用于公共方法?
1条答案
按热度按时间vc9ivgsu1#
更新:在将访问修饰符改为public之后,它工作了,这是否意味着Spring允许AOP只适用于公共方法?
SpringAOP知道两种创建动态代理的方法:
<aop:aspectj-autoproxy proxy-target-class="true"/>
激活(或者一个等价的配置注解),你已经做了,并且对接口和类都有效。所以如果你有一个类实现一个接口,你可以期望只有在那个接口中定义的公共方法是代理,就像JDK代理一样。我想这取决于你如何定义你的Springbean的类型。确保真正示例化类类型,而不是接口类型。那么受保护的或包作用域的方法也应该由CGLIB代理(只是不是私有方法)。所以如果做得正确,这应该可以工作。我不是在这里谈论您使用一个过时的基类和同样过时的方法,只是回答您的问题...