AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在通过预定义的模式(即“切面”)对程序的横切关注点进行模块化。横切关注点是一个在多个应用模块中出现的概念,例如日志记录、事务管理、安全检查等。AOP允许开发者定义“切面”来跨方法、跨类甚至跨应用来操作这些关注点,从而提供了一种从业务逻辑代码中分离出横切关注点的机制。
AOP的核心概念包括连接点(Join Point)、切点(Pointcut)、通知(Advice)、切面(Aspect)等。连接点是在程序执行过程中的一些特定点,如方法的调用或特定异常被抛出。切点则定义了在哪些连接点应用通知的规则。通知是切面的实际行为,它描述了当与切点匹配的方法被调用时应执行的操作。切面则是一个封装了通知和切点的模块,它定义了在何处(切点)以及怎样(通知)进行横切。
AOP的主要优势在于:
AOP提供了一种灵活且强大的方式来处理程序中的横切关注点,使得开发者能够更加专注于业务逻辑的实现,同时提高了代码的可维护性、可扩展性和可读性。
比如说异常处理,在每一个 Ation 中用 try ... catch 捕获异常,这样就存在大量的重复代码。
普通方式解决:
大量的重复代码
大量的测试工作
违背了开闭原则
面向切面编程AOP
Aspect Oriented Programming 在不修改之前的代码为基础,可以动态的增加业务逻辑:
如果可以在已经成型的程序中,如果可以动态在某些行为之前增加点内容;在某些行为之后增加点内容----之前已经开发好的内容保持不变;
AuthorizeAttribute
权限验证
常见作用:资源缓存,ASP.NET Core6提供的是接口 IResourceFilter。
例子:
- public class CustomResourceFilterAttribute : Attribute, IResourceFilter
- {
- ///
- /// 在资源之前
- ///
- ///
- public void OnResourceExecuting(ResourceExecutingContext context)
- {
- Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuting");
- }
-
- ///
- /// 在资源之后
- ///
- ///
- public void OnResourceExecuted(ResourceExecutedContext context)
- {
- Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuted");
- }
- }
- [CustomResourceFilter]
- public IActionResult Index()
- {
- return View();
- }
执行顺序:
IResourceFilter 场景应用
- public class ThirdController : Controller
- {
- public ThirdController()
- {
-
- }
-
- [CustomResourceFilter]
- public IActionResult Index()
- {