轻松玩转java AOP编程思想

之前看过博客园和csdn上的一些介绍AOP编程思想的文章,觉得讲的都不错就是缺乏趣味性。下面我来稍微的介绍一下AOP编程思想

AOP,永远滴神~~

众所周知,java是一门oop(object oriented programming 即面向对象编程)语言,而spring框架和springboot框架中又出现了AOP(面向切面编程)思想。接下来我将通过举例的方式介绍AOP编程思想

为何要用aop(面向切面编程)思想?

大家在做开发时可能会遇到过一些困难,比如登录模块已经做好了,但是没加日志模块,现在想在不大量改动代码的情况下实现登录时日志的创建。还有就是有个模块被要求不能改动内部的代码却要在该模块执行前先去执行另一个模块。没办法,我们还是得去实现,毕竟产品经理和客户是我们永远的大爹。(哈哈哈,稍微吐槽一下~)
言归正传,我们如何实现呢?这时候就要用到aop了,aop就是为了程序员偷懒而建立的一种编程思想。有了它你可以“为所欲为”,你可以通过aop思想在任意满足条件的方法执行前后添加你想执行的方法。这样一来问题就基本解决了。

讲了这么多也不提下aop思想,不看了不看了。

大佬们先别急,我现在就讲讲aop思想。我就举个切蛋糕的例子,我们在切蛋糕时,每切一刀,切出来的面就叫切面而切面上的每个点就叫切入点。此外这个蛋糕上的所有组成的点叫做连接点(连接点可以不被“切”但是切入点一定是被“切”的)。被切的蛋糕切面上的点都会执行被切这个行为,也就是执行了一个叫做通知的东西。(当然这例子举得可能有点离谱,希望大家理解一下~),这个思想就是aop思想

就这就这?

别急,下面我来用代码介绍一下aop,为了介绍方便我使用的是@AspectJ注解方式的aop,其他还有很多种aop实现方式,大家不懂的话可以问问度娘。
首先我们得往pom文件导入所需的包(如果pom文件不清楚的小伙伴可以看看下面这篇文章)
https://blog.csdn.net/qq_17085463/article/details/78820645
在这里插入图片描述
之后我们可以愉快地编程了
首先创建一个注解

...
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Logger {
    
    
	public String value() default "登录";
}

接着我们写一下aop的切面类

@Aspect //此注解很关键不能少
@Service
public class SysLogAspect {
    
    
	//设置切入点,使得spring框架了解需要在哪些方法上进行后续操作
	@Pointcut("@annotation(com.tedu.annotation.Logger)")
	public void doLog() {
    
    }
	//设置环绕通知(最常用的通知可在方法前后都加模块,其他还有Before,After,AfterRunning、AfterThrowing等通知)
	@Around("doLog()")
	public Object around(ProceedingJoinPoint jp) throws Throwable{
    
    
		...//可添加要实现的模块
		Object obj = jp.proceed();
		...//可添加要实现的模块
		return obj;
	}
}

之后再在spring-config.xml中添加需要扫描的包

<context:component-scan base-package="xx.xx.xx"/>

关键一步来了

 <!-- 启用注解方式的aop(默认会注册bean对象,扫描所有@Aspect所描述的对象) -->
 <aop:aspectj-autoproxy/>

最后只要在所需的方法上加上注解即可使用

听你这么一说,我也想试试了

那行吧,光说不练假把式,大伙儿快去试试吧

————————————————分割线————————————
欢迎小伙伴们留言,如果有问题请指出

Guess you like

Origin blog.csdn.net/qq_31236027/article/details/108429707