Chinaunix首页 | 论坛 | 博客
  • 博客访问: 392120
  • 博文数量: 80
  • 博客积分: 2682
  • 博客等级: 少校
  • 技术积分: 907
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-16 09:55
文章分类

全部博文(80)

文章存档

2012年(80)

分类: 系统运维

2012-12-12 15:48:59

spring自己的实现aop的几种方式
  ///========================方式一(根据通知类型的不同常用的有四种情况before,after,around,throws)=================================
      第一种情况:
      java代码org.springframework.aop.MethodBeforeAdvice
      //////////////////////////////////////
      public class TestBeforeAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] args, Object target)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("TestBeforeAdvice先执行");
}
      }
      ////////////////////////////////////////
      xml配置
      
class="com.tfsoftware.tfww.aop.TestBeforeAdvice">
class="com.tfsoftware.tfww.daoimpl.EmployeeDaoImpl">
class="org.springframework.aop.framework.ProxyFactoryBean">
com.tfsoftware.tfww.dao.EmployeeDao
 
    testBeforeAdvice
 
 
 
第二种情况:
      java代码org.springframework.aop.AfterReturningAdvice
      //////////////////////////////////////
public class TestAfterAdvice implements  AfterReturningAdvice{
public void afterReturning(Object returnValue, Method method,
Object[] args, Object target) throws Throwable {
// TODO Auto-generated method stub
System.out.println("TestAfterAdvice后执行");
}
}
      ////////////////////////////////////////
      xml配置
      
class="com.tfsoftware.tfww.aop.TestAfterAdvice">
class="com.tfsoftware.tfww.daoimpl.EmployeeDaoImpl">
class="org.springframework.aop.framework.ProxyFactoryBean">
com.tfsoftware.tfww.dao.EmployeeDao
 
    testBeforeAdvice
 
 
      第三种情况org.aopalliance.intercept.MethodInterceptor
      public class TestMethodInterceptor implements MethodInterceptor{
public Object invoke(MethodInvocation arg0) throws Throwable {
// TODO Auto-generated method stub
System.out.println("111111");
Object object = arg0.proceed();
System.out.println("222222");
return object;
}
}
第四种情况:
import java.lang.reflect.Method;
import org.springframework.aop.ThrowsAdvice;
public class TestThrowsAdvice implements ThrowsAdvice {
  public void afterThrowing(Throwable throwable){
  System.out.println("TestThrowsAdvice");
  }
  public void afterThrowing(Method method,Object[] args,Object object,Throwable throwable){
  System.out.println("TestThrowsAdvice");
  }
  
     }
     
    以上几种方式都没有定义到pointcut,这时目标对象的所有方法都可调用
    
    ///=========================方式二===================== 
    
   
class="com.tfsoftware.tfww.aop.TestAfterAdvice">
class="com.tfsoftware.tfww.daoimpl.EmployeeDaoImpl">
class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
   
     get*
   
   
     
   
class="org.springframework.aop.framework.ProxyFactoryBean">
com.tfsoftware.tfww.dao.EmployeeDao
testPointcutAdvisor
方式二与一的区别主要是在配置上(一没有用切入点只用了通知)
方式二的正则表达式做法
   经常使用的正则表达式符号
.   匹配任何单个字符
+   匹配前一个字符一次或多次
*   匹配前一个字符0次或多次
\   匹配任何正则表达式
 第一种方式 
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
   
     .*get.*
   
   
     
   

第二种方式
class="com.tfsoftware.tfww.aop.TestBeforeAdvice">
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
   
     .*get.*
   
   
     
   
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
testPointcutAdvisor
 *Service
第三种方式(与方式二的区别是bean的配置上)
class="com.tfsoftware.tfww.aop.TestBeforeAdvice">
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
.*get.*
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">    
阅读(1324) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~