标签:cn .. 代理 tulingxueyuan 切面 springAop 操作 public
简介:
切面操作使用的是动态代理,什么是代理?比如你去饭店吃饭,你只管点餐吃饭,而做菜上菜的操作都是饭店员工代理完成的。(只管主要功能而不管公共功能)
那什么是切面操作?以日志记录为例,你吃饭时,每当你吃了十口饭我就给你记录一次,这并不影响你吃饭(主要功能),又完成了日志记录功能,我就相当于那个代理对象,而你就是被代理,代理的操作是每吃十口饭记录+1。
那么如果不是代理呢?每当你吃了十口饭,你就需要停下自己记录一次,这样你的主要功能就受到了影响。
在maven中加入依赖:
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.2.6.RELEASE</version> </dependency>
创建指定的切面类并标注:
@Aspect:声明为切面 @Component:注册为Bean交给spring管理
切面类:
package cn.tulingxueyuan.aspect; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; import java.lang.reflect.Method; import java.util.Arrays; @Aspect @Component public class LogUtil { // 前置通知 @Before("execution(* cn.tulingxueyuan.service..*.*(..))") public static void before(){ System.out.println("方法前"); } // 后置通知 @After("execution(* cn.tulingxueyuan.service..*.*(..))") public static void after(){ System.out.println("方法后"); } // 后置异常通知 @AfterThrowing("execution(* cn.tulingxueyuan.service..*.*(..))") public static void afterException(){ System.out.println("方法异常"); } // 后置返回通知 @AfterReturning("execution(* cn.tulingxueyuan.service..*.*(..))") public static void afterEnd(){ System.out.println("方法返回"); } }
xml配置:
<!--扫描包:扫描类中所有注解,不扫描注解不是生效--> <context:component-scan base-package="cn.tulingxueyuan" > </context:component-scan> <!--因为我们使用的是注解方式的AOP,所以要开启注解AOP功能--> <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
标签:cn,..,代理,tulingxueyuan,切面,springAop,操作,public 来源: https://www.cnblogs.com/0099-ymsml/p/16332836.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。