欢迎来到足球彩票365手机版_彩票365下载安装_彩票365官网! 联系我们 网站地图

足球彩票365手机版_彩票365下载安装_彩票365官网

0379-65557469

彩票365app官网
全国服务热线
0379-65557469

电话: 0379-65557469
0379-63930906
0379-63900388 
0379-63253525   
传真: 0379-65557469
地址:洛阳市洛龙区开元大道219号2幢1-2522、2501、2502、2503、2504、2505室 

彩票365app官网
当前位置: 首页 | 新闻中心 > 彩票365app官网

足球彩票365手机版-浅谈什么是面向切面编程AOP

作者:admin 发布时间:2019-05-14 20:20:51 浏览次数:122
打印 收藏 关闭
字体【
视力保护色

一、前语

看过一些描绘关于AOP切面编程的文章,写的太概念化让人很难了解,下面是我自己的了解,希望能帮到新人,如有过错欢迎纠正。

二、AOP是什么,它的运用场景是什么?

AOP也跟IOC,OOP这些思维相同它仅仅一种编程思维。Autofac、Spring.Net、Castle这些组件完成了AOP切面编程思维的结构。AOP说白了便是在运行时,动态的将代码切入到类的指定办法的指定方位上,这种思维便是面向切面的编程思维。

假如你发现你的办法中有许多重复的代码就能够考虑用aop来精简代码了。比方说你想监控每个办法的耗时,依照传统的办法是每个办法都加上监控代码,假如用AOP思维去处理问题,就能够把跟监控代码放到办法的外面去写。

AOP思维的运用场景:

  • AOP切面缓存
  • 权限认证
  • 过错处恋女童理
  • 调试
  • 日志记载
  • 功用监控
  • 数据耐久化
  • AOP事务

三、AOP切面履行流程

AOP切面有点像拦截器,不过跟拦截器有点差异

四、代码比方

这个比方开发环境运用的是.Net Core 3.0,用的AOP结构是Autofac,经过Nuget装置Autofac.Extras.DynamicProxy组件。

运用过程

1.Startup中把BlogCacheAOP切面 切入到Titan.Blog.AppService.dll下一切接口完成里。

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.切面公共代码

3.给办法符号特性,只要指定特性的办法才会履行公共代码

///

/// 获取体系中一切的权限

///

///

[Caching(AbsoluteExpiration = 10)]

public async Task> GeRoleModule()

{

var dto = await _iSysRoleModuleButtonRepository.QueryAsNoTracking(x => x.ModuleType == 0);//

var roleModuleButton = dto.MapToList();

if (ro足球彩票365手机版-浅谈什么是面向切面编程AOPleModuleButto足球彩票365手机版-浅谈什么是面向切面编程AOPn.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;

}

这个是AOP切面缓存,它的功用是将包括CachingAttribute特性的办法的返回值缓存到Redis里,下次在拜访这个办法,会先去缓存中查询假如有则直接越过这个办法,直接从Redis里获取之前缓存的成果集,假如没有则会履行办法获取返回值在缓存到Redis里。

以此,咱们能够开发其他相似功用,比方功用监控,日志监控,AOP事务,是不是很强壮。详细代码履行流程请下载这个项目(下面有github地址),自己调试下上面的比方就理解了。

还有一个要注意的,我这个项目控制器和服务完成解耦了,假如没有解耦的话,控制器直接调服务的话,AOP注册办法和服务要做修正

1.Startup中AOP注册代码

////符号了虚办法virtual的才会进入切面

var assemblysModels = Assembly.Load("Titan.Blog.AppService");

builder.RegisterAssemblyTypes(assemblysModels)

.EnableClassInterceptors()

.InterceptedBy(typeof(BlogCacheAOP));

2.办法要加上virtual,不然进不了切面

///

/// 获取体系中一切的权限

///

///

[Caching(AbsoluteExpiration = 10)]

public virtual async Task> GeRoleModule()

{

var dto = await _iSysRoleModuleButtonRepository.QueryAsNoTracking(x => x.ModuleType == 0);//

var roleModuleButton = dto.MapToList();

if (roleModuleButton.Count > 0)

{足球彩票365手机版-浅谈什么是面向切面编程AOP

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 ModuleSt足球彩票365手机版-浅谈什么是面向切面编程AOPatus=1 and IsDelete!=1").Result.FirstOrDefault();

}

}

return roleModuleButton;

}

3.切面代码不需要改动

五、结语

AOP思维实际上便是想把事务和公共的处理分隔,对原有的代码没有一点侵略。我觉得学习一个新技术之前,先别读那么多概念性的东西,感觉越看越模糊,只会对学习新技术发生惊骇和冲突心思。咱们能够先看看新技术它能处理什么问题,运用场景是什么,这对学习新技术应该是有优点的。

版权所有:洛阳市建设工程咨询有限责任公司 联系人:李经理 电话: 地址:洛阳市洛龙区开元大道219号2幢1-2522、2501、2502、2503、2504、2505室
版权所有 足球彩票365手机版 浙ICP备125924682号-7