Spring笔记(02) Spring AOP 代码案例

1、pom.xml依赖

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.11.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.0.11.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.0.11.RELEASE</version>
    </dependency>

2、目标类,也是委托对象

@Component("calImpl")
public class CalIml implements Cal {
    //AOP中,目标类也要使用Component注解,将它放到IOC容器中
    @Override
    public int add(int num1, int num2) {
        int result = num1+num2;
        return result;
    }

    @Override
    public int sub(int num1, int num2) {
        int result = num1 - num2;
        return result;
    }

    @Override
    public int mul(int num1, int num2) {
        int result = num1 * num2;
        return result;
    }

    @Override
    public int div(int num1, int num2) {
        int result = num1 / num2;
        return result;
    }

}

3、编写切面类

@Aspect
@Component
public class LoggerAspect {

    //这是一个切面类,Spring会自动根据切面类以及目标类(委托对象)创建一个代理对象
    //@Aspect 表示这是一个切面类,主要在解析 xml 时,用来识别
    //@Component 表示将该类注入 IOC 容器中
    @Before("execution(public int com.guozh.aspect.CalIml.add(..))")
    public void AA(JoinPoint joinPoint){
        //获取方法名
        String name = joinPoint.getSignature().getName();
        //获取参数列表
        String args = Arrays.toString(joinPoint.getArgs());
        System.out.println(name+"的参数是:"+args);
    }

    //@Before:表示 AA 方法的执行时机,在目标方法执行之前
    //execution(public int com.guozh.aspect.CalIml.add(..)) 表示切入点是 com.guozh.aspect.CalIml.add(..)的 add 方法

}

4、编写 spring.xml 文件

    <!--扫描整个包下类,这样碰到有 Component 注解的类就会生成对象-->
    <context:component-scan base-package="com.guozh.aspect"/>
    <!-- 使 Aspect 注解生效,为目标类自动生成代理对象。
    添加 aop:aspectj-autoproxy 注解,Spring 容器会结合切面类和目标类自动生成动态代理对象,
    Spring 框架的 AOP 底层就是通过动态代理的方式完成 AOP -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

5、测试

  public static void main( String[] args ) {
        ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("sping.xml");
        Cal calProxy = (Cal) applicationContext.getBean("calImpl");
        calProxy.add(10, 3);
        calProxy.sub(10, 3);
    }

以上代码笔记内容来自付费专栏:案例上手 Spring 全家桶

PS:并没有透露关键内容,纯粹是零碎笔记。如果侵犯版权,请联系我。

 

本文由老郭种树原创,转载请注明:https://guozh.net/spring-aop-code-demo/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注