博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring aop 小例子demo
阅读量:5102 次
发布时间:2019-06-13

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

 

由于最近的服务项目提供接口有一个需求,所有操作都必须检查操作的服务可用,所以感觉Aop特别适合实施。完成学习的小例子。

 

关于spring-Aop原理:这篇文章写的非常好。

 

 

个人觉着可能上线的时候配置文件更方便一下。所以样例主要是配置文件方式

Demo文件下载地址:

 

 

Spring配置文件

/idle-service-impl/src/main/resources/spring/app-config.xml

 

 

导入的aop-advisor.xml文件

 

/idle-service-impl/src/main/resources/spring/aop-advisor.xml

 

 

 

关于这个类

com.ruishenh.aop.aspect.advisor.GenericAdvisor中方法有

 

1.  before  相应Target运行之前

2.  heartbeat这个是围绕的一个方法

3.  after  相应target运行之后

4.  afterReturning 相应在target处理后结果返回增强处理

5.        handlerException 相应在target运行异常时增强处理

 

 

/idle-service-impl/src/main/java/com/ruishenh/aop/aspect/advisor/GenericAdvisor.java源代码

 

package com.ruishenh.aop.aspect.advisor; import org.aspectj.lang.JoinPoint;importorg.aspectj.lang.ProceedingJoinPoint; import com.ruishenh.domain.account.AccountBank; public class GenericAdvisor {          /**          * 对于要增强的方法。运行围绕处理检查心跳是否正常          * @param joinPoint          * @return          * @throws Throwable          */         Objectheartbeat(ProceedingJoinPoint joinPoint) throws Throwable{                  //               if(checkHeartbeat()) {//                        //               }                   System.out.println("2joinPoint.Signature.name:"+joinPoint.getSignature().getName());                   //记得在调用运行方法的时候异常不要try-catch,要thrwos出去,不然可能事务层没法起效,或者增强异常处理也无法起效                   Objectobj=joinPoint.proceed();                   //下边的參入參数能够改动。可是类型和方法的个数要和原来一致,不然原方法无法运行//               Objectobj=joinPoint.proceed(joinPoint.getArgs());                                     //对于返回后对象,有可能要做处理,对返回參数的某一些值处理,                   //能够通过org.springframework.beans.BeanUtils.copyProperties把一些值赋值                   if(obj==null) {                            returnnew AccountBank();                   }                   returnobj;         }         /**          * 对于要增强的方法,在方法之前运行          * @param joinPoint 连接点信息          */         voidbefore(JoinPoint joinPoint){                   Object[] objs=joinPoint.getArgs();                   System.out.println("1objs:"+objs[0]);                   System.out.println("1joinPoint:"+joinPoint);         };                 /**          * 对于要增强的方法,在方法之后运行          * @param joinPoint  连接点信息          */         voidafter(JoinPoint joinPoint){                   Object[] objs=joinPoint.getArgs();                   System.out.println("4objs:"+objs[0]);                   System.out.println("4joinPoint:"+joinPoint);         };         /**          * 对于要添加的方法,方法返回结果后。对结果进行记录或者分析          * 方法          * @param obj target运行后返回的结果          */         voidafterReturning(Object obj){                   System.out.println("3obj:"+obj);         };         /**          * 对于要增强的方法,方法抛出异常后。对异常的增强处理,比方记录异常。或者依据异常分析数据什么的          * @param e target运行后抛出的异常          */         voidhandlerException(Throwable e){                   System.out.println("handingException......");                   e.printStackTrace();         }                 booleancheckHeartbeat(){                   returntrue;         }}

 

 

 

 

Junit測试

 

/idle-service-impl/src/test/java/com/ruishenh/business/impl/account/AccountServiceImplTest.java

 

package com.ruishenh.business.impl.account; import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;importorg.springframework.test.context.ContextConfiguration;importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner; importcom.ruishenh.domain.account.AccountBank;importcom.ruishenh.domain.account.AccountBankParam;import com.ruishenh.utils.SpringFactoryUtil; @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={"classpath:/spring/app-config.xml"})public class AccountServiceImplTest {          @Before         publicvoid setUp() throws Exception {         }          @Test         publicvoid testStoreIn() throws Exception {                   AccountServiceImplimpl= SpringFactoryUtil.getBean(AccountServiceImpl.class);                   AccountBankParamparam=   new AccountBankParam();                   param.setId(100);                   AccountBankab=impl.storeIn(param);                   System.out.println(ab.toString());         } }

 

 

运行后输出结果:

 

1objs:com.ruishenh.domain.account.AccountBankParam@d522de2[id=100,name=<null>,account=<null>]

1joinPoint:execution(AccountBankcom.ruishenh.business.impl.account.AccountServiceImpl.storeIn(AccountBankParam))

2joinPoint.Signature.name:storeIn

==============todo=====================

4objs:com.ruishenh.domain.account.AccountBankParam@d522de2[id=100,name=<null>,account=<null>]

4joinPoint:execution(AccountBankcom.ruishenh.business.impl.account.AccountServiceImpl.storeIn(AccountBankParam))

3obj:com.ruishenh.domain.account.AccountBank@2d397e5c[id=0,name=<null>,account=<null>]

com.ruishenh.domain.account.AccountBank@2d397e5c[id=0,name=<null>,account=<null>]

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/bhlsheji/p/4891082.html

你可能感兴趣的文章
CLR 关于强命名程序集 .
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
idea 导入eclipse play1.2.7项目
查看>>
如何制作并更改项目icon文件
查看>>
设计模式:迭代器模式(Iterator)
查看>>
cmd批处理常用符号详解
查看>>
关于给构造函数传达参数方法
查看>>
mysql忘记密码时如何修改root用户密码
查看>>
STM32单片机使用注意事项
查看>>
在linux中出现there are stopped jobs 的解决方法
查看>>
获取浏览器版本信息
查看>>
SQLServer之删除视图
查看>>
js forEach跳出循环
查看>>
MyBatis---动态SQL
查看>>
快速创建一个 spring mvc 示例
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
JVM-class文件完全解析-类索引,父类索引和索引集合
查看>>
Loj #139
查看>>
StringBuffer是字符串缓冲区
查看>>