spring5-11


11、AOP

11.3 使用Spring实现AOP

【重点】使用AOP,需要导入一个依赖包!


        
            org.aspectj
            aspectjweaver
            1.9.8
            runtime
        

目录结构:

service包下的UserService接口:

package com.kuang.service;

public interface UserService {
    public void add();
    public void delete();
    public void update();
    public void select();
}

service包下的UserServiceImpl实现类:

package com.kuang.service;

public class UserServiceImpl implements UserService{
    public void add() {
        System.out.println("增加了一个用户");
    }

    public void delete() {
        System.out.println("删除了一个用户");
    }

    public void update() {
        System.out.println("修改了一个用户");
    }

    public void select() {
        System.out.println("查询了一个用户");
    }
}

log包下的Log类:

package com.kuang.log;

import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

public class Log implements MethodBeforeAdvice {
    //method: 要执行的目标对象的方法
    //args: 参数
    //target: 目标对象
    public void before(Method method, Object[] args, Object target) throws Throwable {
        System.out.println(target.getClass().getName()+"的"+method.getName()+"被执行了");
    }
}

log包下的AfterLog类:

package com.kuang.log;


import org.springframework.aop.AfterReturningAdvice;

import java.lang.reflect.Method;

public class AfterLog implements AfterReturningAdvice {
    //returnValue: 返回值
    public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
        System.out.println("执行了"+method.getName()+"方法,返回结果为:"+returnValue);
    }
}

diy包下的DitPointCut类:

package com.kuang.diy;

public class DiyPointCut {
    public void before(){
        System.out.println("===========================方法执行前=======================");
    }

    public void after(){
        System.out.println("===========================方法执行后=======================");
    }
}

方式一:使用Spring的API接口【主要SpringAPI接口实现】
对应的applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?>


    
    
    
    


    
    
        
        
        
        
        
    


方式二:自定义来实现AOP【主要是切面定义】
对应的applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?>