前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VB.NET 实现类似JAVA的AOP切面编程,实现菜单权限控制

VB.NET 实现类似JAVA的AOP切面编程,实现菜单权限控制

作者头像
一线编程
发布2023-03-02 13:28:26
4040
发布2023-03-02 13:28:26
举报
文章被收录于专栏:办公魔盒办公魔盒

一、概念篇

Aspect-Oriented Programming(面向切面编程,AOP)

它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自身,应用程序也可以在发展中拥有新的功能。AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

二、VB.NET实现过程

  1. 环境 这里用到Castle.Core这个AOP类库(当然我们也可以自己实现,这里直接用现成的)
  2. 创建一个窗体Winform项目,然后在Nuget上面获取最新版的Castle.Core依赖即可!

3.创建一个AOP是实现类,来实现Castle.Core的拦截接口

代码语言:javascript
复制
''' <summary>
''' 菜单拦截器
''' </summary>
Public Class BarMenuInterceptor
    Implements IInterceptor
    Private Sub IInterceptor_Intercept(invocation As IInvocation) Implements IInterceptor.Intercept

        Dim isAuth As Boolean = invocation.MethodInvocationTarget.GetCustomAttributes(Of AopPermAttribute)().Any()
        If isAuth Then
            ' MessageBox.Show("你无权限操作该功能")
            invocation.ReturnValue = "你无权限操作该功能"
            Return
        End If
        invocation.Proceed()
    End Sub
End Class

4.创建一个自定义菜单接口

代码语言:javascript
复制

''' <summary>
''' 菜单接口
''' </summary>
Public Interface IBarMenuItems
    Sub TestOne()
    Function TestTwo() As String
End Interface

5.实现自定义菜单接口(注意:这里的方法或者函数前面必须加上Overridable关键字才能实现拦截)

代码语言:javascript
复制
''' <summary>
''' 菜单接口的实现,主意关键点,方法前添加 Overridable
''' </summary>
Public Class IBarMenuItemsImpl
    Implements IBarMenuItems
    Public Overridable Sub TestOne() Implements IBarMenuItems.TestOne
        MessageBox.Show("无参方法测试")
    End Sub

    <AopPerm> Public Overridable Function TestTwo() As String Implements IBarMenuItems.TestTwo
        Return "方法测试"
    End Function
End Class

6.创建一个自定义注解,用来标记需要aop拦截的方法或函数

代码语言:javascript
复制
''' <summary>
''' 自定义注解
''' </summary>
Public Class AopPermAttribute
    Inherits Attribute
    Public Sub New()
    End Sub
End Class

7.实列化AOP实现类

代码语言:javascript
复制
   ''' <summary>
    ''' 创建菜单接口AOP
    ''' </summary>
    Public BarMenuItems As IBarMenuItems = New ProxyGenerator().CreateClassProxy(Of IBarMenuItemsImpl)(New BarMenuInterceptor())

8.创建两个测试按钮,用来调用接口方法

代码语言:javascript
复制
Public Class Form1
    ''' <summary>
    ''' 创建菜单接口AOP
    ''' </summary>
    Public BarMenuItems As IBarMenuItems = New ProxyGenerator().CreateClassProxy(Of IBarMenuItemsImpl)(New BarMenuInterceptor())

    ''' <summary>
    ''' 测试按钮1
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        BarMenuItems.TestOne()

    End Sub

    ''' <summary>
    ''' 测试按钮2
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        MessageBox.Show(BarMenuItems.TestTwo)
    End Sub
End Class

好了,到此就结束了!!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 办公魔盒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档