• 黑马Spring学习 AOP XML和注解配置 5种通知 切点切面通知织入


    业务类
     1 package cn.itcast.aop;
     2 
     3 import org.aspectj.lang.JoinPoint;
     4 import org.aspectj.lang.ProceedingJoinPoint;
     5 import org.aspectj.lang.Signature;
     6 import org.aspectj.lang.annotation.*;
     7 import org.springframework.core.annotation.Order;
     8 import org.springframework.stereotype.Component;
     9 
    10 import java.util.Arrays;
    11 
    12 @Component
    13 @Order
    14 @Aspect
    15 public class Logger {
    16     //切点抽取
    17     @Pointcut("execution(* cn.itcast..*.*(..))")
    18     public void p(){}
    19 
    20     @Before("Logger.p()")
    21     public void before(JoinPoint jp) {
    22         String methodName = jp.getSignature().getName();
    23         Object[] args = jp.getArgs();
    24         System.out.println("methodName:" + methodName + " args:" + Arrays.toString(args));
    25         System.out.println();
    26         System.out.println("before");
    27 //        int i = 1 / 0;
    28     }
    29     @After("Logger.p()")
    30     public void after(){
    31         System.out.println("after");
    32     }
    33 
    34 /*    @Around("p()")
    35     public Object around(ProceedingJoinPoint jp) throws Throwable {
    36         System.out.println("around前");
    37         Object result = jp.proceed();
    38         System.out.println("around后");
    39         return result;
    40     }*/
    41 
    42     //可以强转为连接点返回的类型,没有问题。
    43    /* @Around("p()")
    44     public int around(ProceedingJoinPoint jp) throws Throwable {
    45         System.out.println("around前");
    46         Object result = jp.proceed();
    47         System.out.println("around后");
    48         return (int) result + 5;
    49     }*/
    50 
    51     /*
    52         注意:如果连接点方法有返回值,则环绕必须给返回值,不然的话返回null。
    53             1.如果afterReturnning在around后,而around中获取参数可能出问题
    54             2.业务中调用连接点方法获取返回值时可能会出问题
    55      */
    56     @Around("p()")
    57     public void around(ProceedingJoinPoint jp) throws Throwable {
    58         System.out.println("around前");
    59         jp.proceed();
    60         System.out.println("around后");
    61     }
    62 
    63     /*@AfterReturning(value = "p()", returning = "result")
    64     public void afterReturning(JoinPoint jp, int result){
    65 
    66         String methodName = jp.getSignature().getName();
    67         Object[] args = jp.getArgs();
    68         System.out.println("methodName:" + methodName + " args"
    69                 + Arrays.toString(args) + " result:" + result);
    70         System.out.println("afterReturning");
    71     }*/
    72 
    73     /*@AfterReturning(value="p()", returning = "result")
    74     public void afterReturning(int result){
    75         System.out.println("result:" + result);
    76         System.out.println("afterReturning");
    77     }*/
    78     @AfterReturning("p()")
    79     public void afterReturning(){
    80         System.out.println("afterReturning");
    81     }
    82 
    83     @AfterThrowing("p()")
    84     public void afterThrowing(){
    85         System.out.println("afterThrowing");
    86 //        int i = 1 / 0;
    87     }
    88 }
    切面类
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:aop="http://www.springframework.org/schema/aop"
     4        xmlns:context="http://www.springframework.org/schema/context"
     5        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     6        xsi:schemaLocation="
     7        http://www.springframework.org/schema/beans
     8        http://www.springframework.org/schema/beans/spring-beans.xsd
     9        http://www.springframework.org/schema/aop
    10        http://www.springframework.org/schema/aop/spring-aop.xsd
    11        http://www.springframework.org/schema/context
    12        http://www.springframework.org/schema/context/spring-context.xsd">
    13 
    14     <!--业务类-->
    15     <bean id="userService" class="cn.itcast.aop.UserService"></bean>
    16     <!--切面类-->
    17     <!--<bean id="logger" class="cn.itcast.aop.Logger"></bean>-->
    18 
    19     <!--组件扫描-->
    20     <context:component-scan base-package="cn.itcast"></context:component-scan>
    21 
    22     <!--开启aop代理-->
    23     <!--<aop:aspectj-autoproxy></aop:aspectj-autoproxy>-->
    24 
    25     <!--织入-->
    26     <aop:config>
    27         <aop:aspect ref="logger">
    28             <aop:after-returning  method="afterReturning" pointcut="execution(public void cn.itcast.aop.UserService.deleteById(int))"></aop:after-returning>
    29             <aop:around  method="around" pointcut="execution(public void cn.itcast.aop.UserService.deleteById(int))"></aop:around>
    30             <aop:before method="before" pointcut="execution(public void cn.itcast.aop.UserService.deleteById(int))"></aop:before>
    31             <aop:after-throwing method="afterThrowing" pointcut="execution(public void cn.itcast.aop.UserService.deleteById(int))"></aop:after-throwing>
    32             <aop:after method="after" pointcut="execution(public void cn.itcast.aop.UserService.deleteById(int))"></aop:after>
    33             <!--<aop:around method="start" pointcut="execution(public void cn.itcast.aop.UserService.deleteById(int))"></aop:around>-->
    34         </aop:aspect>
    35     </aop:config>
    36 
    37 </beans>
    Spring核心配置
     1 package cn.itcast;
     2 
     3 import cn.itcast.aop.UserService;
     4 import org.junit.Test;
     5 import org.junit.runner.RunWith;
     6 import org.springframework.beans.factory.annotation.Autowired;
     7 import org.springframework.test.context.ContextConfiguration;
     8 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
     9 
    10 @RunWith(SpringJUnit4ClassRunner.class)
    11 @ContextConfiguration("classpath:applicationContext.xml")
    12 public class AOPTest {
    13 
    14     @Autowired
    15     private UserService userService;
    16 
    17     @Test
    18     public void test(){
    19 //        int i = userService.deleteById(5);
    20 //        System.out.println(i);
    21         userService.deleteById(5);
    22     }
    23 }
    测试类

  • 相关阅读:
    Charles 注册码
    pom.xml
    SpringMVC 表格跳转后显示${message}中的内容显示不出来
    使用IDEA 开发Spring,Maven-->并且部署到 tomcat
    Leetcode51 N后
    n queen
    八皇后问题
    Access提示“操作必须使用一个可更新的查询”的解决办法
    Win7系统卸载McAfee杀毒软件
    Win7(x64)升级到Win10
  • 原文地址:https://www.cnblogs.com/mozq/p/10978099.html
Copyright © 2020-2023  润新知