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. 抛出的异常类
  • 相关阅读:
    JZOJ 3034. 【NOIP2012模拟10.17】独立集
    JZOJ 3035. 【NOIP2012模拟10.17】铁轨
    JZOJ 1259. 牛棚安排
    数位DP JZOJ 3316. 非回文数字
    JZOJ 3046. 游戏
    JZOJ 3013. 填充棋盘
    debian 安装oracle提供的java8
    java 汉字转拼音 PinYin4j
    debian ssh设置root权限登陆 Permission denied, please try again
    java并发下订单生成策略
  • 原文地址:https://www.cnblogs.com/xiexiaofei/p/14217914.html
Copyright © 2011-2022 走看看