首页 > 编程语言 > 详细

初识SpringAOP原理

时间:2020-04-26 20:24:46      阅读:64      评论:0      收藏:0      [点我收藏+]

参考资料: SpringBoot深入浅出2.x

这个真的是太难啦 !??差点又给了

Spring Aop是基于动态代理模式实现的,动态代理模式就是生成一个代理对象来增强或者控制对被代理对象的访问。

比如 被代理对象是 泡面, 那代理对象就是老八。在每次准备吃泡面时,老八会及时出现,并做一些对泡面的增强,我们可以通过老八来增加吃泡面时的体验。

上代码:

 泡面接口

public interface CupNoodle {
public void eat();
}

泡面实现类
public class NaoCanSuanCai implements CupNoodle {
@Override
public void eat() {
System.out.println("奥力给!干了兄弟们!");
}
}


动态代理 老八
public class ProxyBean implements  InvocationHandler{
private Object target = null;
private Interceptor interceptor = null;
public Object bind(Object target){
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
public void majorMeterials() {
System.out.println("香蕉火腿老干妈");
}
public void minorMeterials() {
System.out.println("往里倒点哇哈哈");
}
public void afterEat(){
System.out.println("这小滋味儿 每级啦");
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
this.majorMeterials();
this.minorMeterials();
Object ret = method.invoke(target, args);
this.afterEat();
return ret;
}

}

测试:
public static void main(String args[]){
CupNoodle cupNoodle = (CupNoodle)new ProxyBean().bind(new NaoCanSuanCai());
cupNoodle.eat();
}

核心是 代理类通过bind方法(这个bind方法只是举例), 生成一个动态代理对象与真实业务对象绑定之后返回。
当调用真实业务对象的方法时,实际上调用的是动态代理类实现的InvocationHandler接口的 invoke方法,
之后invoke通过反射机制来调用真实业务对象的方法。
输出结果
技术分享图片

 

你以为你调用的是泡面的方法,但其实泡面早就被老八控制住了。

 










 

初识SpringAOP原理

原文:https://www.cnblogs.com/bigAssBoy/p/12781546.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!