AOP编程@Pointcut、@AfterReturning、@before、@after、@around
来源:互联网 发布:windows to go 怎么用 编辑:程序博客网 时间:2024/05/16 16:23
面向切面编程AOP,前期准备工作:
引入jar包:
aspectjweaver.jar
aspectjrt.jar
cglib.jar (CBLIB的动态代理方式需要这个包)
配置文件:
<aop:aspectj-autoproxy/> 有了这个Spring就能够自动扫描被@Aspect标注的切面了,
下面这个proxy-target-class="true"表示采用CBLIB方式
<aop:aspectj-autoproxy proxy-target-class="true"/>
还要加入切面TestAspect.java:
<context:component-scan base-package="com.test.aspect"/>
TestAspect.java如下:
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
//此处注解不能少
@Component
@Aspect
public class TestAspect{
public static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Pointcut("execution(* com.test.service.impl.*.login(..))")
public void logBefore(){
logger.info("logBefore");
}
@AfterReturning(pointcut = "execution(* com.test.service.impl.*.login(..))")
public void logAfter(){
logger.info("logAfter");
}
@Around("execution(* com.test.service.impl.*.login(..))")
public Object logAround(ProceedingJoinPoint pjp) throws Throwable{
logger.info("logAround");
Object o = null;
try {
o = pjp.proceed();
} catch (Throwable t) {
// 记录返回报文
throw t;
}
Object[] args= pjp.getArgs();
logger.info(args[0]+"logAround"+args[1]);
return o;
}
@Around("logBefore()")
public Object cutAround(ProceedingJoinPoint pjp) throws Throwable{
Object o = null;
try {
o = pjp.proceed();
} catch (Throwable t) {
// 记录返回报文
throw t;
}
Object[] args= pjp.getArgs();
logger.info("cutAround");
int len=args.length;
logger.info(args[len-1]+"cutAround"+args[0]);
return o;
}
// 调ServicClient切点
@Pointcut("execution(* com.test.client.ServiceClient.request(..))&& args(request,seq,..)")
public void serviceClient(String request, String seq) {
}
// 调SocketClient,request()入参为String类型的切点
@Pointcut("execution(* com.test.client.SocketClient.request(..))&& args(request,seq)")
public void socketStrClient(String request, String seq) {
}
@Around("serviceClient(request,seq)||socketStrClient(request,seq)")
public Object doServiceClient(ProceedingJoinPoint pjp, String request, String seq) throws Throwable {
//可加上其他逻辑处理
Object o = null;
try {
o = pjp.proceed();
} catch (Throwable t) {
// 记录返回报文
throw t;
}
Object[] args= pjp.getArgs();
logger.info("cutAround");
int len=args.length;
logger.info(args[len-1]+"cutAround"+args[0]);
return o;
}
// 调SocketClient切点
@Pointcut("execution(* com.test.client.CardSocketClient.request(..))")
public void cardSocketClient() {
}
// 记录后台报文日志
@Around("cardSocketClient()&& args(sendbuf,seq,..)")
public Object doCardSocketClientAround(ProceedingJoinPoint pjp, byte[] sendbuf, String seq) throws Throwable {
//可加上其他逻辑处理
Object o = null;
try {
o = pjp.proceed();
} catch (Throwable t) {
// 记录返回报文
throw t;
}
Object[] args= pjp.getArgs();
logger.info("cutAround");
int len=args.length;
logger.info(args[len-1]+"cutAround"+args[0]);
return o;
}
// 后台DAO切点
@Pointcut("execution(* (com.test.dao.*.*Dao" + " && !com.test.dao.carddb.*"
+ " && !com.test.dao.ubgdb.*" + " && !com.test.dao.libdb.*" + ").*(..))")
public void dao() {
}
// 记录后台外调返回业务日志
@Around("dao()&& args(seq,..)")
public Object doDaoAround(ProceedingJoinPoint pjp, String seq) throws Throwable {
//可加上其他逻辑处理
Object o = null;
try {
o = pjp.proceed();
} catch (Throwable t) {
// 记录返回报文
throw t;
}
Object[] args= pjp.getArgs();
logger.info("cutAround");
int len=args.length;
logger.info(args[len-1]+"cutAround"+args[0]);
return o;
}
}
- AOP编程@Pointcut、@AfterReturning、@before、@after、@around
- spring AOP @Around @Before @After 区别
- spring AOP @Around @Before @After 区别
- spring AOP @Around @Before @After 区别
- spring AOP @Around @Before @After 区别
- spring AOP @Around @Before @After 区别
- spring AOP @Around @Before @After 区别
- spring AOP @Around @Before @After 区别
- spring AOP @Around @Before @After 区别
- Spring2.0 AOP 之Before,After,Thrown,Around Advice(一)
- Spring2.0 AOP 之Before,After,Thrown,Around Advice(二)
- Spring AOP @Before @Around @After 等 advice 的执行顺序
- Spring AOP @Before @Around @After 等 advice 的执行顺序
- Spring AOP @Before @Around @After 等 advice 的执行顺序
- Spring AOP @Before @Around @After 等 advice 的执行顺序
- spring aop的@Before,@Around,@After,@AfterReturn,@AfterThrowing的理解
- @Around @Before @After理解
- Spring AOP 中 advice 的四种类型 before after throwing advice around
- 时间戳转换时间格式
- 创建表空间
- 一个电脑板绘初学者的自述,设计基础
- 幼儿园择校记-海淀清河附近的家长看过来喽!
- MongoDB 聚合管道(Aggregation Pipeline)
- AOP编程@Pointcut、@AfterReturning、@before、@after、@around
- IOS UIView 的坐标扩展,更加便捷的获取View的 height Width X Y size origin 等
- camel3
- java中的Class.forName的作用
- C++学习日记7——模板篇的标准模板库
- Automatic and Manual Locking Mechanisms During SQL Operations
- WPF 使用TextBox做密码输入框
- 在JSP文件中,可以使用3种注释:HTML注释,JSP注释,JAVA注释
- js模拟get请求方式