resumen simple de springAOP

Uno: ¿Qué es springAOP y cuáles son sus escenarios de aplicación?
AOP es como IOC y OOP. Es solo una idea de programación. Los componentes Autofac, Spring.Net y Castle implementan el marco del pensamiento de programación de aspectos AOP. AOP sin rodeos significa que en tiempo de ejecución, el código se corta dinámicamente en la posición especificada del método especificado de la clase. Esta idea es la idea de programación orientada a aspectos.

Si encuentra que tiene mucho código duplicado en su método, puede considerar usar aop para simplificar el código. Por ejemplo, si desea monitorear el tiempo de cada método, el método tradicional es agregar un código de monitoreo a cada método. Si usa AOP para resolver este problema, puede escribir el código de monitoreo fuera del método.

Escenarios de aplicación del pensamiento de AOP:   autenticación de
  caché de aspecto de AOP,   manejo de errores,   depuración,   registro de registros   , monitoreo de rendimiento,   persistencia de datos,   transacción de AOP 2: proceso de ejecución del aspecto de AOP, el aspecto de AOP es un poco como un interceptor, pero es un poco diferente de un interceptor. Tres: ejemplo de código El entorno de desarrollo de este ejemplo utiliza .Net Core 3.0, el marco de AOP utilizado es Autofac y el componente Autofac.Extras.DynamicProxy se instala a través de Nuget.   La función es el caché de aspecto AOP, que almacena en caché los resultados de la consulta en Redis sin tener que consultar la base de datos cada vez.   Use el Paso   1.Inicio para cortar el aspecto BlogCacheAOP en todas las implementaciones de interfaz en Titan.Blog.AppService.dll.









Inserte la descripción de la imagen aquí




var servicesDllFile = Path.Combine(basePath, "Titan.Blog.AppService.dll");//获取项目绝对路径
            var assemblysServices = Assembly.LoadFile(servicesDllFile);
            builder.RegisterAssemblyTypes(assemblysServices)
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope()
                .EnableInterfaceInterceptors()
                .InterceptedBy(typeof(BlogCacheAOP));//AOP切面缓存

2. Código común de aspecto
 Inserte la descripción de la imagen aquí
 3. Marcar características de los métodos, solo los métodos con características específicas ejecutarán código común

/// <summary>
        /// 获取系统中所有的权限
        /// </summary>
        /// <returns></returns>
        [Caching(AbsoluteExpiration = 10)]
        public async Task<List<SysRoleModuleButtonDto>> GeRoleModule()
        {
            var dto = await _iSysRoleModuleButtonRepository.QueryAsNoTracking(x => x.ModuleType == 0);//
            var roleModuleButton = dto.MapToList<SysRoleModuleButton, SysRoleModuleButtonDto>();
            if (roleModuleButton.Count > 0)
            {
                foreach (var item in roleModuleButton)
                {
                    item.SysRole = _iSysRoleRepository.QueryBySql($"select * from SysRole where SysRoleId='{item.SysRoleId}' and IsDelete!=1 and RoleStatus=1").Result.FirstOrDefault();
                    item.SysModule = _iSysModuleRepository.QueryBySql($"select * from SysModule where SysModuleId='{item.SysModuleId}' and ModuleStatus=1 and IsDelete!=1").Result.FirstOrDefault();
                }

            }
            return roleModuleButton;
        }

Este es el caché de aspecto AOP. Su función es almacenar en caché el valor de retorno del método que contiene la función CachingAttribute en Redis. La próxima vez que acceda a este método, primero irá al caché y lo consultará. Si lo hay, omita este método directamente de Redis Obtenga el conjunto de resultados previamente almacenado en caché; de lo contrario, ejecutará el método para obtener el valor de retorno y almacenarlo en caché en Redis.

De esta manera, podemos desarrollar otras funciones similares, como la supervisión del rendimiento, la supervisión de registros y las transacciones AOP, ya sea que sea muy potente. Descargue este proyecto para el proceso de ejecución de código específico (la dirección de github se encuentra a continuación) y depure el ejemplo anterior usted mismo para comprenderlo.

***** Otra cosa a tener en cuenta es que el controlador y el servicio de mi proyecto están desacoplados. Si no hay desacoplamiento, el controlador ajusta directamente el servicio y el método de registro y el servicio de AOP deben modificarse.
1. Código de registro de AOP en Inicio

            ////标记了虚方法virtual的才会进入切面
            var assemblysModels = Assembly.Load("Titan.Blog.AppService");
            builder.RegisterAssemblyTypes(assemblysModels)
                .EnableClassInterceptors()
                .InterceptedBy(typeof(BlogCacheAOP));

2. El método debe agregar virtual, de lo contrario no puede ingresar el corte

/// <summary>
        /// 获取系统中所有的权限
        /// </summary>
        /// <returns></returns>
        [Caching(AbsoluteExpiration = 10)]
        public virtual async Task<List<SysRoleModuleButtonDto>> GeRoleModule()
        {
            var dto = await _iSysRoleModuleButtonRepository.QueryAsNoTracking(x => x.ModuleType == 0);//
            var roleModuleButton = dto.MapToList<SysRoleModuleButton, SysRoleModuleButtonDto>();
            if (roleModuleButton.Count > 0)
            {
                foreach (var item in roleModuleButton)
                {
                    item.SysRole = _iSysRoleRepository.QueryBySql($"select * from SysRole where SysRoleId='{item.SysRoleId}' and IsDelete!=1 and RoleStatus=1").Result.FirstOrDefault();
                    item.SysModule = _iSysModuleRepository.QueryBySql($"select * from SysModule where SysModuleId='{item.SysModuleId}' and ModuleStatus=1 and IsDelete!=1").Result.FirstOrDefault();
                }

            }
            return roleModuleButton;
        }

3. No es necesario cambiar el código de aspecto
4. La conclusión de la
  idea de AOP es en realidad separar el procesamiento comercial y público, sin ninguna intrusión en el código original. Siento que antes de aprender una nueva tecnología, no leo tantas cosas conceptuales. Cuanto más la miro, más confundido estaré en el miedo y la resistencia a aprender nuevas tecnologías. Primero podemos ver qué problemas puede resolver la nueva tecnología y cuál es el escenario real de la aplicación, lo que debería ser bueno para aprender nuevas tecnologías.
  Enlace para compartir el código fuente: https://pan.baidu.com/s/1PdE4ZXwobq3dEaUCc0iJgQ código de extracción: uniq

17 artículos originales publicados · Me gusta0 · Visitas 224

Supongo que te gusta

Origin blog.csdn.net/weixin_42531204/article/details/104554881
Recomendado
Clasificación