AOP是您在这里需要的。AOP允许您将代码添加到您的应用程序,而无需修改原始代码。Spring AOP倾向于使用 Proxy 对象来完成此任务。
代理 对象使用装饰器模式包装原始 Target 对象并添加代码。所述 代理 被配置为实现原始的一个或多个接口 的目标 对象。
在这里,为应用程序计时的想法是使用
PerformanceMonitorInterceptorSpring框架附带的性能监视类之一。
第一种选择是使用Spring类
ProxyFactoryBean创建Spring AOP 代理 对象。去做这个:
- 定义您的 原始bean :
- 定义一个
PerformanceMonitorInterceptor
: - 定义一个
RegexpMethodPointcutAdvisor
: - 定义一个
ProxyFactoryBean
代理原始bean并应用 Advisor - 将日志级别设置
PerformanceMonitorInterceptor
为 TRACE
在Spring配置下面说明了这些步骤:
<beans> <bean id="MyServiceTarget" > <property ... /> </bean> <bean id="timingLogger" /> <bean id="timingAdvisor" > <property name="advice" ref="timingLogger"/> <property name="patterns"> <list> <value>.*</value> </list> </property> </bean> <bean id="MyService" > <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容器中每个对象的每个接口。
<beans "add xsd declarations here" > <bean id="MyService" > <property ... /> </bean> <bean id="timingAdvice"/> <aop:config> <aop:advisor pointcut="execution(* org.myapp.services.MyService.*(..))" advice-ref="timingAdvice"/> </aop:config></beans>



