2021-11-04aop的实现方法
作者:互联网
在spring中可以通过那些方法来实现动态代理
学习aop之前需要理解动态代理的过程与实现
aop主要还是学一个思想 在不影响原本业务的前提下 来实现业务的增强 也就是横向编程 在企业里面 千万不要随意去改动原有的代码 如果要来实现业务的扩充 我们就可以用到这里的思想 。
一、方法一(xml来实现)
前置信息 首先需要知道一些名词
切面 简单来说就是你需要增强的业务的类 比如你需要加一个日志功能在注册之前 那么 这个添加日志功能的类便是这个切面 。
通知 通知就是添加日志的这个方法 就是用来增强业务的简写
切入点 指的就是具体要在哪里加入这个增强方法比如在注册之前 那么切入点就是注册的这个方法
示例:正常流程是先 有一个类 类实现了接口的方法 实例化这个类 再调用这个类里面的add方法 但是这里我们有一个切面 切面里面有两个通知 再调用add方法的时候 我们先会去调用切面的通知 把他放到切入点那里从而实现aop
具体的样子就看下面的这个注解的代码
<bean id="user" class="UserServerImpl"/>
<bean id="log" class="Log"/>
<bean id="userServer" class="UserServerImpl"/>
<!-- 一定要记得开启注解的支持-->
<aop:aspectj-autoproxy/>
<aop:config>
<!-- 这是aop的第二种实现方法-->
<!-- config里面是对这些aop的配置-->
<aop:aspect ref="log" >
<!-- 这里配置的是切面 就是切入进去的东西 需要做的事情-->
<aop:pointcut id="point" expression="execution(* UserServerImpl.*(..))"/>
<!-- 这里是切入的点 指的是具体在哪个方法来调用这个通知-->
<aop:before method="before" pointcut-ref="point"/>
<!-- 这里就开始调用切面的方法了 在哪里调用 调用什么方法都是通过这个来实现的-->
<aop:after method="after" pointcut-ref="point"/>
</aop:aspect>
</aop:config>
这样的话就可以实现业务的增强
二、使用注解来进行增强
这个比较简单 只需要记住几个注解 还有使用的地方
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect//标注这个类是一个切面
public class Log {
@Before("execution(* UserServer.*(..))") 这里的注解表示的是我们的通知是在切入点之前还是切入点之后
public void before(){
System.out.println("========输出之前的==============");
}
public void after(){
System.out.println("========输出之后的==============");
}
}
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AOPtest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 1.这里通过beans.xml来取到context上下文配置
UserServer user = (UserServer) context.getBean("userServer");
// 我们的spring取到的是这个类的接口 也就是我们管理的其实是这个代理而不是这个类
// 通过上下文配置取到里面的接口类
user.del();
}
}
三丶总结
springAOP由此看来并不是很难 其中的思想还是十分精髓 横向开发 利用动态代理和反射 来实现把类的功能进行扩充 代理模式是把 房东的主动权交给了第三方代理 代理来实现租房的方法并对功能进行扩充 那么我们spring也是 自己有了一个代理 我们把类和接口交给了这个代理 代理便自动的接管 顺便实现了扩充功能。
标签:11,实现,切入点,代理,04aop,切面,方法,public,2021 来源: https://blog.csdn.net/q584401071/article/details/121144927