做理财网站,有免费的wordpress,2021年天津教师招聘信息,asp网站 攻击面向切面编程 这个切面是哪个面
面向切面编程#xff08;Aspect-Oriented Programming#xff0c;AOP#xff09;是一种编程范式#xff0c;它通过切面#xff08;Aspect#xff09;来分离横切关注点#xff08;Cross-cutting Concerns#xff09;和核心业务逻辑。
在…面向切面编程 这个切面是哪个面
面向切面编程Aspect-Oriented ProgrammingAOP是一种编程范式它通过切面Aspect来分离横切关注点Cross-cutting Concerns和核心业务逻辑。
在AOP中切面是对横切关注点的抽象和封装。横切关注点是指那些与核心业务逻辑无关但又散布在各个模块中、影响多个模块的功能或行为如日志记录、事务管理、安全检查等。切面通过定义通知Advice和切点Pointcut来描述横切关注点。
通知Advice定义了切面在何时、如何执行附加逻辑。例如在方法执行前执行的前置通知、在方法执行后执行的后置通知、在方法抛出异常时执行的异常通知等。
切点Pointcut定义了切面所要应用的连接点Join Point。连接点是程序执行过程中能够触发切面的特定位置如方法调用、方法执行、异常抛出等。切点表达式定义了哪些连接点符合切点的条件。
切面通过将通知和切点组织在一起实现了对横切关注点的统一管理和重用。在Spring框架中AOP通过代理技术和动态字节码生成实现。在运行时Spring会根据配置将切面织入到目标对象中从而实现横切关注点的功能。
总而言之AOP是一种通过切面来分离横切关注点和核心业务逻辑的编程范式切面通过定义通知和切点来描述和管理横切关注点。
Spring中通知
在Spring框架中通知Advice是AOP的核心概念之一用于定义在目标方法执行过程中需要执行的附加逻辑。通知可以在目标方法执行前、执行后或发生异常时被触发执行。
Spring框架提供了以下几种类型的通知 前置通知Before Advice 前置通知在目标方法执行之前执行可以在此处进行一些准备工作或参数校验等操作。例如可以在前置通知中记录日志或进行权限检查。 后置通知After Returning Advice 后置通知在目标方法成功执行后执行可以获取到目标方法的返回值并进行一些后处理操作。例如可以在后置通知中对返回结果进行处理或记录日志。 异常通知After Throwing Advice 异常通知在目标方法抛出异常时执行可以捕获目标方法抛出的异常并进行相应的处理操作。例如可以在异常通知中发送告警或记录异常日志。 最终通知After Advice 最终通知在目标方法执行结束后包括正常结束和异常结束执行无论目标方法是否抛出异常最终通知都会被执行。例如可以在最终通知中释放资源或进行清理操作。 环绕通知Around Advice 环绕通知是最为灵活的通知类型它可以在目标方法执行前后都进行逻辑处理并且可以控制是否执行目标方法。环绕通知需要负责显式地调用目标方法并可以改变传递给目标方法的参数。
通过使用这些通知类型我们可以将横切关注点例如日志、事务管理等与业务逻辑相分离提高代码的可维护性和重用性。在Spring AOP中通知是通过切面Aspect来组织和管理的。
Spring AOP中的通知举例
Aspect
Component
public class MyAspect {//定义前置通知Before(execution(* com.example.demo.service.UserService.addUser(..)))public void beforeAddUser(JoinPoint joinPoint) {System.out.println(before addUser);}//定义后置通知AfterReturning(value execution(* com.example.demo.service.UserService.addUser(..)), returning result)public void afterAddUser(JoinPoint joinPoint, Object result) {System.out.println(after addUser, result: result);}//定义异常通知AfterThrowing(value execution(* com.example.demo.service.UserService.addUser(..)), throwing ex)public void afterAddUserException(JoinPoint joinPoint, Exception ex) {System.out.println(after addUser exception, message: ex.getMessage());}//定义最终通知After(execution(* com.example.demo.service.UserService.addUser(..)))public void afterAddUserFinally(JoinPoint joinPoint) {System.out.println(after addUser finally);}//定义环绕通知Around(execution(* com.example.demo.service.UserService.addUser(..)))public Object aroundAddUser(ProceedingJoinPoint pjp) throws Throwable {System.out.println(around addUser start);Object result null;try {result pjp.proceed();System.out.println(around addUser end, result: result);} catch (Throwable e) {System.out.println(around addUser exception, message: e.getMessage());throw e;}return result;}
}上面的代码中我们定义了一个切面MyAspect并在其中定义了前置通知、后置通知、异常通知、最终通知和环绕通知。这些通知分别会在UserService的addUser方法执行前后或出现异常时被触发执行。例如在执行UserService的addUser方法前会执行beforeAddUser方法执行成功后会执行afterAddUser方法出现异常时会执行afterAddUserException方法在执行结束时会执行afterAddUserFinally方法在执行过程中会执行aroundAddUser方法。通过这些通知我们可以对UserService的addUser方法进行统一的日志记录、事务管理等操作。