是否有可能在springframework中记录方法所花费的时间?全部]自动。我的意思是,我不想进入每种方法并编写log.debug(“ ....”); 东西。
AOP是您在这里需要的。AOP允许您将代码添加到您的应用程序,而无需修改原始代码。Spring AOP倾向于使用 Proxy 对象来完成此任务。 代理 对象使用装饰器模式包装原始 Target 对象并添加代码。所述 代理 被配置为实现原始的一个或多个接口 的目标 对象。
在这里,为应用程序计时的想法是使用PerformanceMonitorInterceptorSpring框架附带的性能监视类之一。
PerformanceMonitorInterceptor
第一种选择是使用Spring类ProxyFactoryBean创建Spring AOP 代理 对象。去做这个:
ProxyFactoryBean
RegexpMethodPointcutAdvisor
在Spring配置下面说明了这些步骤:
<beans> <bean id="MyServiceTarget" class="org.myapp.services.MyService"> <property ... /> </bean> <bean id="timingLogger" class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor"/> <bean id="timingAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice" ref="timingLogger"/> <property name="patterns"> <list> <value>.*</value> </list> </property> </bean> <bean id="MyService" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>org.myapp.services.MyService</value> </property> <property name="target"><ref local="MyServiceTarget"/></property> <property name="interceptorNames"> <list> <value>timingAdvisor</value> </list> </property> </bean> </beans>
以及日志级别的配置PerformanceMonitorInterceptor:
log4j.logger.org.springframework.aop.interceptor.PerformanceMonitorInterceptor=TRACE
从Spring 2.0开始,还有另一个选择:使用基于Spring 2.0 XML Schema的配置和Spring的AspectJ样式切入点表达式。使用,ProxyFactoryBean您必须显式声明要代理的接口。使用<aop:config>和<aop:advisor>标记,您可以自动代理Bean容器中每个对象的每个接口。
<aop:config>
<aop:advisor>
<beans "add xsd declarations here" > <bean id="MyService" class="org.myapp.services.MyService"> <property ... /> </bean> <bean id="timingAdvice" class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor"/> <aop:config> <aop:advisor pointcut="execution(* org.myapp.services.MyService.*(..))" advice-ref="timingAdvice"/> </aop:config> </beans>