【狂神】Spring5 (三) 之Aop的实现方式

今天没有偷懒,只是忘了Mybatis,所以去补课了~

┏━━━━━━━━━━━━━━━┓  
 NICE PIGGY PIG..  
┗━━━━━━━△━━━━━━━┛  
    ヽ(´・ω・)ノ       
      |  /         
       UU          

1.Aop实现方式一

1.1、什么是AOP

1.2、AOP在Spring的作用

【狂神】Spring5 (三) 之Aop的实现方式_第1张图片3、使用Spring实现Aop

【狂神】Spring5 (三) 之Aop的实现方式_第2张图片

1.4、案例代码

//1.afterLog
package com.zhang.log;

import org.springframework.aop.AfterAdvice;
import org.springframework.aop.AfterReturningAdvice;

import java.lang.reflect.Method;

public class AfterLog implements AfterReturningAdvice {
    @Override
    public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
        System.out.println("执行了"+method.getName()+"方法,结果为:"+returnValue);
    }
}
//2.Log
package com.zhang.log;

import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

public class Log implements MethodBeforeAdvice {
    @Override
    public void before(Method method, Object[] args, Object target) throws Throwable {
        System.out.println(target.getClass().getName()+"的"+method.getName()+"被执行了");
    }
}

//3.UserService
package com.zhang.service;

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

//4.UserServicelmpl
package com.zhang.service;

public class UserServicelmpl implements UserService {
    @Override
    public void add() {
        System.out.println("添加!");
    }

    @Override
    public void delete() {
        System.out.println("删除!");

    }

    @Override
    public void update() {
        System.out.println("更改!");

    }

    @Override
    public void query() {
        System.out.println("查找!");

    }
}

//5.Test类
import com.zhang.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = context.getBean("UserService", UserService.class);
        userService.delete();
    }
}

//6.pom.xml
 
        
            org.aspectj
            aspectjweaver
            1.9.4
        
//7.application.xml


    
    
    
    
    
    
    
        
        
        
        
        
    

2、Aop实现方式二

【狂神】Spring5 (三) 之Aop的实现方式_第3张图片

相关代码如下:


    
    
        
        
            
            
            
            
            
        
    

3、Aop实现方式三

注解实现IOP

方式三是通过注解来实现的,这里多加了个环绕的知识点。

【狂神】Spring5 (三) 之Aop的实现方式_第4张图片

相关代码:

package com.zhang.diy;
​
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
​
@Aspect
public class AnnotationPoinCut {
    @Before("execution(* com.zhang.service.UserServicelmpl.*(..))")
    public void before(){
        System.out.println("=====前====");
    }
    @After("execution(* com.zhang.service.UserServicelmpl.*(..))")
    public void after(){
        System.out.println("=====后====");
    }
    @Around("execution(* com.zhang.service.UserServicelmpl.*(..))")
    public void around(ProceedingJoinPoint jp) throws Throwable {
        System.out.println("环绕前");
        Object proceed = jp.proceed();
        System.out.println("环绕后");
    }
}

 总结

​总言之,aop的实现可能理解会有点麻烦,但是只要再看一遍视频就好了。其实主要就是一些理念的理解,比如说切面,切入点这些。很简单的,用心就可以了。加油哦!

【狂神】Spring5 (三) 之Aop的实现方式_第5张图片

你可能感兴趣的:(Spring,java,spring,前端)