佳丽斯 加厚双人/单人秋冬被子暖冬 羊毛被芯羊毛柔丝被特价包邮 忧忧鱼冬外穿打底裤女秋冬厚长裤女裤加绒加厚高腰弹力铅笔裤靴裤 韩国代购2013新款 韩版秋冬休闲女时尚磨破口袋卫衣韩版学生装 潮

有时,退一步,能一口气进几步,只是这先退一步需要勇气和自信。

用心爱你,努力工作。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  70 随笔 :: 1 文章 :: 33 评论 :: 0 Trackbacks

呵呵,这两天项目比较急,事情也比较多,所以没有及时更新。
上一回简单介绍了代理机制,通过创建LogBeforeAdvice来实现。通过实现MethodBeforeAdvice接口,会在目标对象的方法执行之前被呼叫。当然也可以通过实现AfterReturningAdvice,使得目标对象的方法在执行之后被调用。
同样创建LogAfterAdvice类,实现AfterReturningAdvice接口。
lib包下载:http://www.ziddu.com/download/3555992/SpringAndaop.rar.html

(1)LogAfterAdvice.java

package com.proxy;

import java.lang.reflect.*;
import java.util.logging.Logger;
import java.util.logging.Level;
import org.springframework.aop.AfterReturningAdvice;

public class LogAfterAdvice  implements AfterReturningAdvice{

 private Logger logger=Logger.getLogger(this.getClass().getName());
 public void afterReturning(Object object,Method method,Object[] args,Object target) throws Throwable
 {
  logger.log(Level.INFO,"LogAfterAdvice mehtod ends "+method);
 }

}
(2)advice-config.xml修改如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="logBeforeAdvice" class="com.proxy.LogBeforeAdvice" />
    <bean id="logAfterAdvice" class="com.proxy.LogAfterAdvice" />
 <bean id="helloSpeaker" class="com.proxy.HelloSpeaker" />
 
 <bean id="helloProxy"
  class="org.springframework.aop.framework.ProxyFactoryBean"><!--建立代理对象-->
  <property name="proxyInterfaces"><!--代理接口-->
   <value>com.proxy.IHello</value>
  </property>
  <property name="target"><!--代理目标-->
   <ref bean="helloSpeaker"/>
  </property>
  <property name="interceptorNames"><!--代理实现类-->
   <list>
    <value>logBeforeAdvice</value>
    <value>logAfterAdvice</value>
   </list>
  </property>
 </bean>
 
</beans>

这样就实现了目标对象的方法在执行之后被调用。


同样,在方法执行前后调用目标对象的方法也可以不通过上面的这种方式(毕竟实现两个接口比较麻烦),可以直接通过实现MethodInterceptor接口,达到目的。
如LogInterceptor类便实现了这样的接口,如下
(3)LogInterceptor.java

package com.proxy;

import java.util.logging.Logger;
import java.util.logging.Level;
import org.aopalliance.intercept.*;

public class LogInterceptor  implements MethodInterceptor{

 private Logger logger=Logger.getLogger(this.getClass().getName());

 public Object invoke(MethodInvocation Invocation) throws Throwable {
  
  logger.log(Level.INFO,"LogInterceptor method starts..."+Invocation.getMethod());
  
  Object result=null;
  
  try
  {
   result=Invocation.proceed();
  }
  finally
  {
   logger.log(Level.INFO,"LogInterceptor method ends..."+Invocation.getMethod());
  }
  return result;
 }

}

(4)advice-config.xml 配置文件修改如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="logInterceptor" class="com.proxy.LogInterceptor" />
 <bean id="helloSpeaker" class="com.proxy.HelloSpeaker" />
 
 <bean id="helloProxy"
  class="org.springframework.aop.framework.ProxyFactoryBean"><!--建立代理对象-->
  <property name="proxyInterfaces"><!--代理接口-->
   <value>com.proxy.IHello</value>
  </property>
  <property name="target"><!--代理目标-->
   <ref bean="helloSpeaker"/>
  </property>
  <property name="interceptorNames"><!--代理实现类-->
   <list>
    <value>logInterceptor</value>
   </list>
  </property>
 </bean>
 
</beans>

通过实现MethodInterceptor接口,同样实现了这样的功能。



 

posted on 2007-10-31 19:14 王生生 阅读(951) 评论(0)  编辑  收藏 所属分类: Spring

只有注册用户登录后才能发表评论。


网站导航:
 
森露2013新款豹纹打底衫 高领 女 长袖 修身长袖t恤女 加绒加厚冬 2013春秋新款女装 潮修身大码长袖小西装外套女 韩版中长款小西装 忧忧鱼2013秋冬新款直筒裤女显瘦长裤加绒黑色休闲裤修身西裤女裤