Pas*_*ent 17
AOP就是你需要的.AOP允许您在不修改原始代码的情况下向应用程序添加代码.Spring AOP更喜欢使用Proxy对象来完成此任务.代理对象使用装饰器模式来包装原始Target对象并添加代码.所述代理被配置为实现原始的一个或多个接口的目标对象.
在这里,为了给应用程序计时,我们的想法是使用PerformanceMonitorInterceptorSpring Framework附带的性能监视类之一.
第一个选项是使用Spring类ProxyFactoryBean创建Spring AOP Proxy对象.去做这个:
PerformanceMonitorInterceptor:RegexpMethodPointcutAdvisor:ProxyFactoryBean代理原始bean并应用您的顾问PerformanceMonitorInterceptor为TRACE的日志级别在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>
Run Code Online (Sandbox Code Playgroud)
以及日志级别的配置PerformanceMonitorInterceptor:
log4j.logger.org.springframework.aop.interceptor.PerformanceMonitorInterceptor=TRACE
Run Code Online (Sandbox Code Playgroud)
从Spring 2.0开始,还有另一种选择:使用基于Spring 2.0 XML Schema的配置和Spring的AspectJ样式切入点表达式.随着ProxyFactoryBean你必须明确地宣布要代理的接口; 使用<aop:config>和<aop:advisor>标签,您可以自动代理bean容器中每个对象的每个接口.
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11748 次 |
| 最近记录: |