(1)创建配置类,不需要创建 xml 配置文件

    1. @Configuration
    2. @ComponentScan(basePackages = {"com.atguigu"})
    3. @EnableAspectJAutoProxy(proxyTargetClass = true)
    4. public class ConfigAop {
    5. }

    1**、创建两个类,增强类和被增强类,创建方法
    被增强类:**

    1. package com.wzy.aspect;
    2. import org.springframework.stereotype.Component;
    3. @Component
    4. public class User {
    5. public void user() {
    6. System.out.println("user方法执行啦");
    7. }
    8. }

    增强类:

    1. package com.wzy.aspect;
    2. import org.aspectj.lang.ProceedingJoinPoint;
    3. import org.aspectj.lang.annotation.*;
    4. import org.springframework.stereotype.Component;
    5. //增强的类
    6. @Component
    7. //@Aspect
    8. public class UserProxy {
    9. //抽取公共部分
    10. @Pointcut(value = "execution(* com.wzy.aspect.User.user(..))")
    11. public void pointdemo() {
    12. }
    13. //前置通知
    14. //@Before 注解表示作为前置通知
    15. @Before(value = "pointdemo()")
    16. public void before() {
    17. System.out.println("1、before.........");
    18. }
    19. //后置通知(返回通知)
    20. @AfterReturning(value = "pointdemo()")
    21. public void afterReturning() {
    22. System.out.println("2、afterReturning.........在方法返回值后执行");
    23. }
    24. //最终通知
    25. @After(value = "pointdemo()")
    26. public void after() {
    27. System.out.println("3、after.........在方法后执行");
    28. }
    29. //异常通知
    30. @AfterThrowing(value = "pointdemo()")
    31. public void afterThrowing() {
    32. System.out.println("4、afterThrowing.........");
    33. }
    34. //环绕通知
    35. @Around(value = "pointdemo()")
    36. public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    37. System.out.println("环绕之前.........");
    38. //被增强的方法执行
    39. Object proceed = proceedingJoinPoint.proceed();
    40. System.out.println("环绕之后.........");
    41. }
    42. }
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:aop="http://www.springframework.org/schema/aop"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans
    7. http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
    8. <!-- 开启注解扫描,创建对象 -->
    9. <context:component-scan base-package="com.wzy.aspect"></context:component-scan>
    10. <!--创建对象,方式二-->
    11. <!-- <bean id="user" class="com.wzy.aspect.User"/>
    12. <bean id="userProxy" class="com.wzy.aspect.UserProxy"/>-->
    13. <aop:config>
    14. <!-- 切入点:对哪个类的那个方法增强-->
    15. <aop:pointcut id="u" expression="execution(* com.wzy.aspect.User.user())"/>
    16. <!-- ref:增强类对象 的bean的id -->
    17. <aop:aspect ref="userProxy">
    18. <!--
    19. method="before":前置通知
    20. pointcut-ref="u":引入要切入的点
    21. -->
    22. <aop:before method="before" pointcut-ref="u"/>
    23. </aop:aspect>
    24. </aop:config>
    25. </beans>

    测试:

    
    package com.wzy.aspect;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class TestAspect {
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("com/wzy/aspect/bean.xml");
        @Test
        public void test1() {
            User user = applicationContext.getBean("user", User.class);
            user.user();
        }
    }
    

    输出结果:

    1、before……… user方法执行啦