zoukankan      html  css  js  c++  java
  • AOP面向切面编程

    传统的面向对象编程弊端:

    同样的add()方法中,可能含有相同的代码,可以抽取出来。变成x()方法
    但是一旦x()方法改名,或者逻辑变了需要定义在add之前。。。。后果不堪设想
     
    AOP面向切面编程很好的解决了这一弊端

    前置通知:在特定的方法之前通知。
    异常通知:在方法发生异常通知
    环绕通知:前后都可以通知
     
    通知的实现步骤:
    1. 导入jar包
      1. aopaliance.jar
      2. aspectjweaver.jar
    2. 配置:
    <!--切入点所在的类-->
    <bean id="StudentService" class="com.serviceimpl.StudentServiceImpl">
        <property name="studnetdao" ref="studentdao"></property>
    </bean>
    可以写前置通知,后置通知。。。。。。。
    <!--    前置通知类-->
        <!--    ===============连接线的一端================-->
        <bean id="logbefore" class="com.normal.logBefore"></bean>
    <!--    将切入点和通知进行关联-->
        <aop:config>
            <!-- 配置切入点(在哪里进行通知)-->
            <!--    ===============连接线的另一端================-->
            <aop:pointcut id="point" expression=" execution(public void com.service.StudentService.delStudentById(int)) or execution(public void com.service.StudentService.addStudent(com.entity.Student))"/>
            <!--advisor相当于链接切入点和切面的线-->
            <!--==========连接线=====-->
            <aop:advisor advice-ref="logbefore" pointcut-ref="point"></aop:advisor>
        </aop:config>
    <aop:pointcut id="point" expression=" execution()"/>
    execution()中填写的 切入点的方法声明,当一个切入面有多个切入点时:多个方法声明中 用”or“相连。并且,切入点的方法只需要写明类型即可,不需要写变量。

     前置通知的具体实现

    public class logBefore implements MethodBeforeAdvice {
        @Override
        public void before(Method method, Object[] objects, Object o) throws Throwable {
            System.out.println("前置通知!!!");
        }
    }

    上述说的是约定条件

    异常通知:
    实现了异常接口,虽然里面没有抽象方法,但是需要编写编写一下方法:
    1. public void afterThrowing(Method method,Object[] args,Object target,ThrowableSubclass o)
    2. public void afterThrowing(ThrowableSubclass o)
    编写上述其中之一的方法就行,
    参数列表分别是:
    1. 切入点
    2. 切入点的参数列表
    3. 调用切入点的对象
    4. 抛出的异常类
  • 相关阅读:
    C#开源框架
    8 种 NoSQL 数据库系统对比
    安装补丁“此更新不适用于你的计算机”解决办法
    .net开源资料
    winform程序退出
    jquery.chained与jquery.chained.remote使用以及区别
    存储过程使用回滚
    C# Panel中绘图如何出现滚动条
    C#结构体的特点浅析
    如何用堆栈和循环结构代替递归调用--递归转换为非递归的10条军规
  • 原文地址:https://www.cnblogs.com/xiexiaofei/p/14217914.html
Copyright © 2011-2022 走看看