便捷网站建设哪家好,wordpress有什么好玩的插件,网站如何做视频点播,设计案例网一、什么是AOP#xff1f;在不修改源代码的情况下 增加功能二、底层是什么#xff1f;动态代理aop是IOC的一个扩展功能#xff0c;现有IOC#xff0c;再有AOP#xff0c;只是在IOC的整个流程中新增的一个扩展点而已#xff1a;BeanPostProcessorbean的创建过程中有一个步…一、什么是AOP在不修改源代码的情况下 增加功能二、底层是什么动态代理aop是IOC的一个扩展功能现有IOC再有AOP只是在IOC的整个流程中新增的一个扩展点而已BeanPostProcessorbean的创建过程中有一个步骤可以对bean进行扩展实现AOP本身就是一个扩展功能所以BeanPostProcessor的后置处理方法来进行实现三、术语①、连接点在一个类里面哪些方法可以被增强这些方法就称为连接点②、切入点实际被真正增强的方法称为切入点③、通知增强实际增强的逻辑部分称为通知增强通知有多种类型前置通知后置通知环绕通知异常通知最终通知④、切面把通知应用到切入点的过程四、AOP操作Spring框架一般都是基于AspectJ实现AOP操作什么是AspectJ不是Spring组成部分独立AOP框架一般把AspectJ和Spring框架一起使用进行AOP操作基于AspectJ实现AOP操作基于xml配置方式基于注解方式一、注解方式引入AOP依赖开启注解扫描开启Aspect生成代理对象 User类package com.atguigu.spring5.AOP;import org.springframework.stereotype.Component;/*** BelongsProject: 02-Spring* BelongsPackage: com.atguigu.spring5.AOP* Author: dengLiMei* CreateTime: 2023-02-11 19:54* Description: TODO* Version: 1.0*/
//被增强类
Component
public class User {public void add() {System.out.println(add……);}
}UserProxy类package com.atguigu.spring5.AOP;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;/*** BelongsProject: 02-Spring* BelongsPackage: com.atguigu.spring5.AOP* Author: dengLiMei* CreateTime: 2023-02-11 19:55* Description: TODO* Version: 1.0*/
//增强的类
Component
Aspect //生成代理对象
public class UserProxy {//前置通知//Before注解表示作为前置通知Before(value execution(* com.atguigu.spring5.AOP.User.add()))public void before() {System.out.println(before.....);}//最终通知方法之后就执行有异常也执行After(value execution(* com.atguigu.spring5.AOP.User.add()))public void After() {System.out.println(After.....);}//后置通知返回通知在返回结果之后执行有异常不执行AfterReturning(value execution(* com.atguigu.spring5.AOP.User.add()))public void AfterReturning() {System.out.println(AfterReturning.....);}//异常通知有异常了才执行没异常不执行AfterThrowing(value execution(* com.atguigu.spring5.AOP.User.add()))public void AfterThrowing() {System.out.println(AfterThrowing.....);}//环绕通知//表示在方法之前和方法之后都执行Around(value execution(* com.atguigu.spring5.AOP.User.add()))public void Around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {System.out.println(环绕之前.....);//被增强的方法执行proceedingJoinPoint.proceed();System.out.println(环绕之后.....);}
}Main类package com.atguigu.spring5.AOP;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** BelongsProject: 02-Spring* BelongsPackage: com.atguigu.spring5.AOP* Author: dengLiMei* CreateTime: 2023-02-11 20:05* Description: TODO* Version: 1.0*/
public class Main {public static void main(String[] args) {ApplicationContext context new ClassPathXmlApplicationContext(aopbean.xml);User user context.getBean(user, User.class);user.add();}
}输出结果问题对指定类的指定方法做增强解决对相同切入点进行抽取PersonProxy类在上面例子基础上增加一个新类package com.atguigu.spring5.AOP;import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;/*** BelongsProject: 02-Spring* BelongsPackage: com.atguigu.spring5.AOP* Author: dengLiMei* CreateTime: 2023-02-11 20:21* Description: TODO* Version: 1.0*/
Component
Aspect
Order(1)
public class PersonProxy {//后置通知返回通知Before(value execution(* com.atguigu.spring5.AOP.User.add(..)))public void afterReturning(){System.out.println(Person Before……);}
}输出结果有多个增强类对同一个方法进行增强设置增强类优先级在增强类上面增加注解Order数字类型值数字类型值越小优先级越高二、AspectJ配置方式创建对象配置aop增强 切入点配置切面Book类package com.atguigu.spring5.AOP.AOPConfigue;/*** BelongsProject: 02-Spring* BelongsPackage: com.atguigu.spring5.AOP.AOPConfigue* Author: dengLiMei* CreateTime: 2023-02-11 20:38* Description: TODO* Version: 1.0*/
public class Book {public void buy(){System.out.println(买);}
}BookProxy类package com.atguigu.spring5.AOP.AOPConfigue;/*** BelongsProject: 02-Spring* BelongsPackage: com.atguigu.spring5.AOP.AOPConfigue* Author: dengLiMei* CreateTime: 2023-02-11 20:40* Description: TODO* Version: 1.0*/
public class BookProxy {public void before(){System.out.println(before……);}
}Main类package com.atguigu.spring5.AOP.AOPConfigue;import com.atguigu.spring5.AOP.AOPAnnotation.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** BelongsProject: 02-Spring* BelongsPackage: com.atguigu.spring5.AOP.AOPConfigue* Author: dengLiMei* CreateTime: 2023-02-11 20:44* Description: TODO* Version: 1.0*/
public class Main {public static void main(String[] args) {ApplicationContext context new ClassPathXmlApplicationContext(aopbean2.xml);Book book context.getBean(book, Book.class);book.buy();}
}输出结果 Spring系列文章Spring——是什么作用内容用到的设计模式Spring——Bean管理-xml方式进行属性注入Spring——Bean管理-注解方式进行属性注入Spring——什么是IOCSpring——AOP是什么?如何使用Spring——什么是事务传播行为事务隔离级别有哪些Spring——整合junit4、junit5使用方法如果有想要交流的内容欢迎在评论区进行留言如果这篇文档受到了您的喜欢那就留下你点赞收藏脚印支持一下博主~