spring aop

Aspect(切面):集成了各种通知(Adivce)
JoinPoint(连接点):方法的调用
Adivce(通知):对切入点的额外处理。around,before,after,after-returning等
Pointcut:可以插入通知的连接点
ProceedingJoinPoint 只能处理环绕通知

配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
              http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx.xsd">
  <context:annotation-config />
  <context:component-scan base-package="com.xll"/>
  <bean id="teacher" class="com.xll.Teacher"/>
  <bean id="aspectTest" class="com.xll.AspectTest"/>
  <aop:config >
    <aop:pointcut expression="execution(* com.xll.Teacher.*(..))" id="joinpoint"/>
    <aop:aspect ref="aspectTest">
        <aop:around method="around" pointcut-ref="joinpoint"/>
        <aop:before method="before" pointcut-ref="joinpoint"/>
        <aop:after method="after" pointcut-ref="joinpoint"/>
        <aop:after-returning method="returnAfter" pointcut-ref="joinpoint" returning="re"/>
    </aop:aspect>
  </aop:config>
</beans>

切面代码:

package com.xll;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public class AspectTest {   
    public Object around(ProceedingJoinPoint pp) throws Throwable
    {
        System.out.println("around增强处理开始,为方法参数赋值!");
        Object[] args = pp.getArgs();
        if(args[0] != null)
            args[0] = "小明";
        Object obj = pp.proceed(args);
        return obj; 
    }
    public void before(JoinPoint jp){
        System.out.println("方法" + jp.getSignature().getName() + "即将被执行!");
    }
    public void after(JoinPoint jp){
        System.out.println("方法" + jp.getSignature().getName() + "已经执行完了!");
    }
    public void returnAfter(JoinPoint jp , Object re){
        System.out.println("我到底在哪?" + re);
    }
}

最终运行结果:

环绕通知中需要有返回值,afterreturning的re中才会有值!
顺序是:around,before,after,afterreturning
其中环绕通知可以对目标方法的中参数进行修改

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xia744510124/article/details/49908449
文章标签: spring aop
个人分类: Spring
想对作者说点什么? 我来说一句

spring aop spring aop

2011年06月29日 23KB 下载

srping aop应用

2018年03月15日 4KB 下载

Spring_2.x_AOP声明式配置详解

2011年02月25日 21KB 下载

springaop简单例子

2011年09月04日 2.66MB 下载

spring注解aop demo

2010年11月12日 48KB 下载

Spring aop Spring aop

2008年12月03日 640KB 下载

Spring专题与案例-AOP

2010年01月06日 78KB 下载

spring aop的demo

2012年03月11日 18KB 下载

Spring通过XML实现AOP

2018年04月18日 4.7MB 下载

没有更多推荐了,返回首页

不良信息举报

spring aop

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭