`
pavel
  • 浏览: 917015 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring入门(06)-Spring的AOP

阅读更多

一.注解方式

打开注解<aop:scoped-proxy />

定义拦截类和注入对象

 <bean id="personService" class="com.hx.sprindemo01.service.impl.PersonServiceImpl"/>
  <bean id="MyInterceptor" class="com.hx.sprindemo01.service.impl.MyInterceptor"/>

定义切面   

@Aspect
public class MyInterceptor {

定义切入点

  @Pointcut("execution(* com.hx.sprindemo01.service.impl.PersonServiceImpl.*(..))")
  public void anyMethod() {} 
  定义通知
  @Before("anyMethod()&& args(user)")//拦截到参数值
  public void dosm(String user){
   System.out.println("前置函数"+user);
  }

  @AfterReturning(pointcut="anyMethod()",returning="result")拦截到返回值
  public void doend(String result){
   System.out.println("后置函数result"+result);
  }  @After("anyMethod()")
  public void doAfter(){
   System.out.println("最终通知");
  }

  @AfterThrowing("anyMethod()")
  public void doAfterThrowing(){
   System.out.println("例外通知");
  }

 @Around("anyMethod()")
 public Object doBasicProfiling(ProceedingJoinPoint pjp)throws  Throwable{
  System.out.println("进入方法");
   Object result = pjp.proceed();
   System.out.println("退出方法");
   return result;
 }

 

 

}

 

 

 

二.配置文件方式

   <aop:aspectj-autoproxy/>
  <bean id="personService" class="com.hx.sprindemo01.service.impl.PersonServiceImpl"/>
  <bean id="MyInterceptor2" class="com.hx.sprindemo01.service.impl.MyInterceptor2"/>
  <aop:config>
    <aop:aspect id="myaop" ref="MyInterceptor2">
     <aop:pointcut id="mycut" expression="execution(* com.hx.sprindemo01.service.impl.PersonServiceImpl.*(..))"/>
     <aop:before pointcut-ref="mycut" method="dosm"/>
     <aop:after-returning pointcut-ref="mycut" method="doend"/>
     <aop:after-throwing pointcut-ref="mycut" method="doAfterThrowing"/>
     <aop:after pointcut-ref="mycut" method="doAfter"/>
     <aop:around pointcut-ref="mycut" method="doBasicProfiling"/>
    </aop:aspect>
  </aop:config>

配置参数,只要修改expression内容就可以了

execution(java.lang.String com.hx.sprindemo01.service.impl.PersonServiceImpl.*(..))

execution(* com.hx.sprindemo01.service.impl.PersonServiceImpl.*(java.lang.String,..))

execution(!void com.hx.sprindemo01.service.impl.PersonServiceImpl.*(java.lang.String,..))

 

类中方法

execution(* com.hx.sprindemo01.service.impl.PersonServiceImpl.*(java.lang.String,..))

 

包下所有类

execution(* com.hx.sprindemo01.service.impl..*.*(..))

 

表达式常见错误:第一个星号后面加空格

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics