问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

aop 的使用

发布网友 发布时间:2022-04-23 14:59

我来回答

2个回答

热心网友 时间:2022-04-27 05:17

怎么使用AOP?

(1)动态代理实现AOP:

考虑一个电子商务系统,需要对订单进行添加、删除等管理操作。毫无疑问,在实际的应用场景中,这些行为应与权限管理结合,只有获得授权的用户方能够实施这些行为。采用传统的设计方法,其伪代码如下:
public class OrderManager
{
private ArrayList m_Orders;
public OrderManager()
{
m_Orders = new ArrayList();
}
public void AddOrder(Order order)
{
if (permissions.Verify(Permission.ADMIN))
{

m_Orders.Add(order);
}
}

public void RemoveOrder(Order order)
{
if (permissions.Verify(Permission.ADMIN))
{
m_Orders.Remove(order);
}
}
}

同样的,在该电子商务系统中,还需要对商品进行管理,它采用了同样的授权机制:
public class ProctManager
{
private ArrayList m_Procts;
public ProctManager()
{
m_Procts = new ArrayList();
}
public void AddProct(Proct proct)
{
if (permissions.Verify(Permission.ADMIN))
{
m_Procts.Add(proct);
}
}
public void RemoveProct(Proct proct)
{
if (permissions.Verify(Permission.ADMIN))
{
m_Procts.Remove(proct);
}
}
}

如此以来,在整个电子商务系统中,核心业务包括订单管理和商品管理,它们都需要相同的权限管理,如图2.4所示:

图2.4 电子商务系统的权限验证实现

毫无疑问,利用AOP技术,我们可以分离出系统的核心关注点和横切关注点,从横向的角度,截取业务管理行为的内部消息,以达到织入权限管理逻辑的目的。当执行AddOrder()等方法时,系统将验证用户的权限,调用横切关注点逻辑,因此该方法即为AOP的join point。对于电子商务系统而言,每个需要权限验证的方法都是一个单独的join point。由于权限验证将在每个方法执行前执行,所以对于这一系列join point,只需要定义一个point cut。当系统执行到join point处时,将根据定义去查找对应的point cut,然后执行这个横切关注点需要实现的逻辑,即advice。而point cut和advice,就组合成了一个权限管理aspect。

图2.5 AOP动态横切的技术实现

由于aspect是一个封装的对象,我们可以定义这样一个aspect:
private static aspect AuthorizationAspect{……}

然后在这个aspect中定义point cut,在point cut中,定义了需要截取上下文消息的方法,例如:
private pointcut authorizationExecution():
execution(public void OrderManager.AddOrder(Order)) ||
execution(public void OrderManager.DeleteOrder(Order)) ||
execution(public void ProctManager.AddProct(Proct)) ||
execution(public void ProctManager.DeleteProct(Proct));

由于权限验证是在订单管理方法执行之前完成,因此在before advice中,定义权限检查:
before(): authorizationExecution()
{
if !(permissions.Verify(Permission.ADMIN))
{
throw new UnauthorizedException();
}
}

通过定义了这样一个完整的aspect,当系统调用OrderManager或ProctManager的相关方法时,就触发了point cut,然后调用相应的advice逻辑。如此以来,OrderManager和ProctManager模块就与权限管理模块完全解除了依赖关系,同时也消除了传统设计中不可避免的权限判断的重复代码。这对于建立一个松散耦合、可扩展的系统软件是非常有利的。

参考资料:http://www.uol123.com/?p=24 |数据库之家

热心网友 时间:2022-04-27 06:35

面向切面编程,楼主能把问题说的清楚一些嘛
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2198香辣虾是什么意思 虾什么梗 肖战 刻纸制作需要哪些步骤 好玩的生存游戏手游(好玩的生存游戏手游推荐) 北京电脑职业培训学校都有哪些北京电脑培训班都有哪些 欧盟商标注册需要提供什么资料? 怎么注册欧盟商标?需要准备哪些材料? 5g手机有什么好处 5g手机大概多少钱 口水臭是什么原因呢? 口水臭是什么原因 口水臭怎么改善 springMVC tx:method是配置aop:pointcut切面拦截的方法吗 如何确定猕猴桃的采收期? 猕猴桃已经采摘完毕,果园的下一步管理都需要做什么? 猕猴桃几月采摘 猕猴桃什么季节成熟采摘 猕猴桃结果后,为什么要在发硬的时候进行采摘? 如何采收猕猴桃? 猕猴桃什么时候采摘最合适?2017年猕猴桃价格多少钱一斤 猕猴桃不能早采,这是为什么呢? 猕猴桃果实怎样采收,猕猴桃的采收方法 中国古代工匠精神的代表性人物有哪些 iPhone5S0首付0利息 iphone弄虚拟内存结果swapfile0为0字节,怎么回事,应该怎么办,求大神解答 iPhone连接iTunes 显示0首歌曲但是占据容量300多Mb,为何? iphone手机,c8pjvauydtc0是不是翻新机,谢谢。。 oppo手机能用搜狗输入法iphone版3.0.0花漾字吗 怎么看医院化验单? iphone通讯录里怎么会有*0QDhaoma 怎么确定一个医院是不是正规的医院呢?比如在网上所看到的某个医院 医院体重称怎么看 我的项目是按照模块分类,想用aop做事务管理,请问<aop:pointcut中的expression怎么写呢 怎么使用@pointcut 和@before 魅族账号用户名可以修改么? 魅族的口碑那么好,但为何很少有人用呢? 魅族手机怎么登录账户? 魅族手机怎么注销账户? 魅族手机flyme帐号怎么注册? 怎么在手机上登陆魅族账号? 求问移动50m和电信20m哪个看电视更好些? 知道移动不稳定 但是50m是不是会好些? 中国移动的itv电视如何,大家用过吗 魅族手机怎样获取账号和密码 ? 中国移动手机电视的问题.高手进 普通手机通过地面基地台接收和发射信息,卫星电视直接通过卫星传递信息.它们都是利用______传递信息的, java Integer和int之间的比较问题是什么? 地球末日生存a基地输入密码后说没电力怎么办 印度能否替代中国成为世界手机生产第一基地? 华为手机代言美女去了美军基地了吗? 2020年移动电视网费多少钱一年? 看手机的危害 电瓶车充电站收费价格?