NingShanFeng_2019面试之SpringAOP 创建方式

注解方式实现 AOP 编程 步骤

           1) 先引入 aop 相关 jar 文件 (aspectj aop 优秀组件

           2) bean.xml 中引入 aop 名称空间

           3) 开启 aop 注解

           4) 使用注解

@Aspect 指定一个类为切面类

@Pointcut("execution(* com.haicao.service.UserService.add(..))") 指 定

 

切入点表达式

@Before("pointCut_()") 前置通知: 目标方法之前执行

@After("pointCut_()") 后置通知目标方法之后执行始终执行)

@AfterReturning("pointCut_()") 返回后通知执行方法结束前执行 (异常不执行)

@AfterThrowing("pointCut_()") 异常通知: 出现异常时候执行

@Around("pointCut_()") 环绕通知环绕目标方法执行

 

@Component

@Aspect

public class Aop {

          @Before("execution(* com.haicao.service.UserService.add(..))")

           public void begin() {

                  System.out.println("前置通知");

           }

 

           @After("execution(* com.haicao.service.UserService.add(..))")

           public void commit() {

                System.out.println("后置通知");

           }

 

          @AfterReturning("execution(* com.haicao.service.UserService.add(..))")

          public void afterReturning() {

                  System.out.println("运行通知");

         }

 

         @AfterThrowing("execution(* com.haicao.service.UserService.add(..))")

         public void afterThrowing() {

                System.out.println("异常通知");

         }

 

        @Around("execution(* com.haicao.service.UserService.add(..))")

        public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {

                   System.out.println("我是环绕通知-");

                   proceedingJoinPoint.proceed();

                   System.out.println("我是环绕通知-");

       }

}

 

XML 方式实现 AOP 编程

               1) 引入 jar 文件 【aop 相关 jar, 4

               2) 引入 aop 名称空间

               3)aop 配置

* 配置切面类 重复执行代码形成的类

* aop 配置

           拦截哪些方法 / 拦截到方法后应用通知代码

 

<beansxmlns="http://www.springframework.org/schema/beans"
   .........
                http://www.springframework.org/schema/aop/spring-aop.xsd">

<!--dao实例-->
           <beanid="userDao"class="com.haicao.UserDao"></bean>
          <beanid="orderDao"class="com.haicao.OrderDao"></bean>

<!--切面类-->
         <beanid="aop"class="com.haicao.Aop"></bean>

<!--Aop配置-->
<aop:config>
         <!--定义一个切入点表达式:拦截哪些方法-->
         <aop:pointcutexpression="execution(*com.haicao.*.*(..))"id="pt"/><!--切面-->
        <aop:aspectref="aop">

<!--环绕通知-->
          <aop:aroundmethod="around"pointcut-ref="pt"/>

<!--前置通知:在目标方法调用前执行-->
          <aop:beforemethod="begin"pointcut-ref="pt"/>

<!--后置通知:-->
         <aop:aftermethod="after"pointcut-ref="pt"/>

<!--返回后通知-->
        <aop:after-returningmethod="afterReturning"pointcut-ref="pt"/>

<!--异常通知-->
       <aop:after-throwingmethod="afterThrowing"pointcut-ref="pt"/>
       </aop:aspect>
</aop:config>
</beans>

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值