-
@Pointcut("@annotation(AdminOnly)") //切点为标注有 AdminOnly注解的方法
public void adminOnly(){}
@Before("adminOnly()") // 表示在该方法之前执行check()
public void check(){}
查看全部 -
AOP适用场景
查看全部 -
编程范式概览
面向过程编程 面向对象编程 函数式编程 事件驱动编程
查看全部 -
AOP的应用场景
权限控制、缓存控制、事务控制、审计日志、性能监控、分布式追踪、异常处理等。
查看全部 -
spring aop实现的方式
查看全部 -
Spring如何选择使用jdk代理还是cglib代理?
1、如果目标对象实现了接口,默认使用JDK代理
2、如果目标对象没有实现接口,默认使用cglib代理
3、如果目标对象实现了接口,但我们可以强制使用cglib代理,方法如下: @SpringBootApplication @EnableAspectJAutoProxy(proxyTargetClass = true)
public class AppStarter{
public static void main(String[] args) { SpringApplication.run(AppStarter.class, args);
}
}
查看全部 -
JDK与Cglib代理对比:
1:JDK只能针对有接口的类的接口方法进行动态代理;
2:Cglib基于继承来实现代理,无法对static、final类进行代理;
3:Cglib基于继承来实现代理,无法对private、static方法进行代理。
查看全部 -
Cglib实现:
1:生成指定类对象的子类,也就是重写类中的业务函数。
2:执行回调函数,加入intercept()函数。
3:创建这个类的子类对象。
-----------------------------------------
反射技术实现; methodProxy.invokeSuper();
查看全部 -
jdk运行期动态代理源码解析:其实就是真实类实现一个接口,我们再写一个类似于切面的类,实现invocationhandler接口且实现invoke方法,同时要保存真实类对象,初始化时赋值对象,invoke方法中反射方式调用真实对象方法,在方法前后可以加上定制的逻辑,这个方法其实是动态代理对象调用的,动态代理对象是客户端通过动态代理类实例化的,而动态代理类是真实对象方法执行前的运行期生成的.class类,这个类实现了和真实对象一样的接口,所以也有真实对象的方法,调用代理对象方法时也就可以传入参数,然后代理对象再将方法和参数传递给invocationhandler的实例对象。
查看全部 -
JDK实现要点:
1类:java.lang.reflect.Proxy;
2接口:InvoctionHandler;
3只能基于接口进行动态代理
查看全部 -
静态代理:代理方法多的时候,重复的逻辑就多,一个目标类对应一个代理类
查看全部 -
1.面向接口编程
客户端通过接口引用目标对象或代理对象,这里体现了面向对象的面向接口,客户端调用的目标对象的方法,代理对象都要有,因此目标对象和代理对象共同作为接口的实现类
2。代理对象把真正的方法委托给目标对象来执行,自己就执行额外的也就是AOP要织入的逻辑
即客户端调用代理的方法,同时给代理类传入目标对象,在代理类里面代理类通过目标对象来调用目标类的方法,在执行方法前后加上代理类的逻辑
查看全部 -
代理AOP对象
caller:调用方
target:目标对象
proxy:代理对象
客户端通过代理对象间接地和目标对象交互
目标对象委托了代理对象来跟客户端交互
因此代理对象可以在执行目标对象方法前做一些操作
查看全部 -
AOP织入的时机
查看全部 -
Advice中的参数及结果绑定
查看全部
举报