博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring中的aop注解(整合junit测试)
阅读量:5788 次
发布时间:2019-06-18

本文共 4436 字,大约阅读时间需要 14 分钟。

使用spring中的aop前先来了解一下spring中aop中的一些名词

Joimpoint(连接点):目标对象中,所有可能增强的方法

PointCut(切入点):目标对象,已经增强的方法

Advice(通知/增强):增强的代码

Target(目标对象):被代理对象

Weaving(织入):将通知应用到切入点的过程

Proxy(代理):将通知织入到目标对象之后,形成代理对象

aspect(切面):切入点+通知

一:不使用spring的aop注解

以javaEE中的service层为例

UserService.java:被代理对象

public interface UserService {    void save();    void delete();    void update();    void find();}

UserServiceImpl.java:被代理对象的实现类

public class UserServiceImpl implements UserService {    @Override    public void save() {        System.out.println("保存用户!");        //int i = 1/0;    }    @Override    public void delete() {        System.out.println("删除用户!");    }    @Override    public void update() {        System.out.println("更新用户!");    }    @Override    public void find() {        System.out.println("查找用户!");    }}

MyAdvice.java:通知,增强的代码

//通知类public class MyAdvice {        //前置通知    //        |-目标方法运行之前调用    //后置通知(如果出现异常不会调用)//        |-在目标方法运行之后调用    //环绕通知//        |-在目标方法之前和之后都调用    //异常拦截通知//        |-如果出现异常,就会调用    //后置通知(无论是否出现 异常都会调用)//        |-在目标方法运行之后调用//----------------------------------------------------------------    //前置通知    public void before(){        System.out.println("这是前置通知!!");    }    //后置通知    public void afterReturning(){        System.out.println("这是后置通知(如果出现异常不会调用)!!");    }    //环绕通知    public Object around(ProceedingJoinPoint pjp) throws Throwable {        System.out.println("这是环绕通知之前的部分!!");        Object proceed = pjp.proceed();//调用目标方法        System.out.println("这是环绕通知之后的部分!!");        return proceed;    }    //异常通知    public void afterException(){        System.out.println("出事啦!出现异常了!!");    }    //后置通知    public void after(){        System.out.println("这是后置通知(出现异常也会调用)!!");    }}

applicationContext.xml

Demo.java:整个junit的aop测试类

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:cn/itcast/d_springaop/applicationContext.xml")public class Demo {    @Resource(name="userService")    private UserService us;        @Test    public void fun1(){        us.save();    }  }

二:使用spring的aop注解

以javaEE中的service层为例

UserService.java:被代理对象

public interface UserService {    void save();    void delete();    void update();    void find();}

UserServiceImpl.java:被代理对象的实现类

public class UserServiceImpl implements UserService {    @Override    public void save() {        System.out.println("保存用户!");        //int i = 1/0;    }    @Override    public void delete() {        System.out.println("删除用户!");    }    @Override    public void update() {        System.out.println("更新用户!");    }    @Override    public void find() {        System.out.println("查找用户!");    }}

MyAdvice.java:通知类

//通知类@Aspect//表示该类是一个通知类public class MyAdvice {    @Pointcut("execution(* cn.itcast.service.*ServiceImpl.*(..))")    public void pc(){}    //前置通知    //指定该方法是前置通知,并制定切入点    @Before("MyAdvice.pc()")    public void before(){        System.out.println("这是前置通知!!");    }    //后置通知    @AfterReturning("execution(* cn.itcast.service.*ServiceImpl.*(..))")    public void afterReturning(){        System.out.println("这是后置通知(如果出现异常不会调用)!!");    }    //环绕通知    @Around("execution(* cn.itcast.service.*ServiceImpl.*(..))")    public Object around(ProceedingJoinPoint pjp) throws Throwable {        System.out.println("这是环绕通知之前的部分!!");        Object proceed = pjp.proceed();//调用目标方法        System.out.println("这是环绕通知之后的部分!!");        return proceed;    }    //异常通知    @AfterThrowing("execution(* cn.itcast.service.*ServiceImpl.*(..))")    public void afterException(){        System.out.println("出事啦!出现异常了!!");    }    //后置通知    @After("execution(* cn.itcast.service.*ServiceImpl.*(..))")    public void after(){        System.out.println("这是后置通知(出现异常也会调用)!!");    }}

applicationContext.xml

Demo.java:测试类

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:cn/itcast/e_annotationaop/applicationContext.xml")public class Demo {    @Resource(name="userService")    private UserService us;        @Test    public void fun1(){        us.save();    }    }

 

转载于:https://www.cnblogs.com/ms-grf/p/7440779.html

你可能感兴趣的文章
Node第一天
查看>>
【开源】多多客发布 3.0.0-alpha.6,Koa+Vue+Taro最佳实践
查看>>
页面搭建工具总结及扩展架构思考
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务(十五)Springboot整合RabbitMQ...
查看>>
SpringCloud使用Prometheus监控(基于Eureka)
查看>>
10g手动创建数据库
查看>>
集群之RHCS
查看>>
auto_install_zabbix.sh
查看>>
Linux—文件系统
查看>>
运用Loadrunner测试Mysql数据库性能
查看>>
mysql ERROR 1396 (HY000): Operation CREATE USER failed 解决办法
查看>>
Spring MVC EL表达式不能显示
查看>>
Tomcat version 5.5 only supports J2EE 1.2, 1.3, and 1.4 Web modules
查看>>
【致青春】我们挥霍时间的年代
查看>>
WDS系列之四:自定义安装映像
查看>>
CentOS7 NTP server + keepalived
查看>>
jQuery 表单应用:全选/取消全选,表单验证,网页选项卡切换
查看>>
分布式计算相关
查看>>
Castle 整合.NET Remoting
查看>>
Windwos Server 2008 R2 DHCP服务
查看>>