@Around("execution(*com.example.service.UserService.*(..))")publicObjectlogAroundMethod(ProceedingJoinPointjoinPoint)throwsThrowable{logger.info("Methodexecutionstarted...");Objectresult=joinPoint.proceed();logger.info("Methodexecutioncompleted.");returnresult;}
acca中国官网-acca(中国):}
####7.2CGLIB代理CGLIB代理适用于非接口类。如果你需要对一个非接口类进行增强,可以使用CGLIB代理:
java@Configuration@EnableAspectJAutoProxy(proxyTargetClass=true)publicclassAppConfig{}
通过设置`proxyTargetClass=true`,我们可以使用CGLIB代理来增强非接口类。###8.实际应用场景####8.1日志记录日志记录是AOP最常见的应用场景之一。通过定义一个切面,可以在不修改现有代码的情况下,在方法调用前后记录日志。
java@Aspect@ComponentpublicclassLoggingAspect{
acca中国官网-acca(中国):定义一个切面来处理日志记录和执行时间计算:
@Aspect@ComponentpublicclassPerformanceLoggingAspect{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(PerformanceLoggingAspect.class);@Before("execution(*com.example.service.UserService.*(..))")publicvoidlogBeforeMethod(){logger.info("Methodexecutionstarted...");}@AfterReturning(pointcut="execution(*com.example.service.UserService.*(..))",returning="result")publicvoidlogAfterMethod(Objectresult){longexecutionTime=System.currentTimeMillis()-startTime;logger.info("Methodexecutioncompleted.Result:"+result+".Executiontime:"+executionTime+"ms");}}
acca中国官网-acca(中国):事务管理
@Aspect@ComponentpublicclassTransactionAspect{@Before("execution(*com.example.service.*.*(..))")publicvoidstartTransaction(){System.out.println("Startingtransaction...");}@AfterReturning(pointcut="execution(*com.example.service.*.*(..))",returning="result")publicvoidcommitTransaction(){System.out.println("Committingtransaction...");}@AfterThrowing(pointcut="execution(*com.example.service.*.*(..))",throwing="error")publicvoidrollbackTransaction(Throwableerror){System.out.println("Rollingbacktransactiondueto:"+error.getMessage());}}
校对:张经义(1C0m4pJyqZtPma0S7t9ZFfz4hTykKag)


