aop
文章平均质量分 69
后台开发者Ethan
李大健一个想从事大数据的java开发者、go初级学习者
展开
-
AbstractAutoProxyCreator
不同于ProxyFactory和ProxyFactoryBean 给单个bean增加代理。spring提供了基于一定规则自动发现和代理。public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware {ProxyProcessorSupport 继承自Pro.原创 2021-10-26 14:20:31 · 224 阅读 · 0 评论 -
spring-advisor-advised
Advisor接口,holding advice(action to take at a joinpoint,在连接点上执行的动作)和pointcut。Advice EMPTY_ADVICE = new Advice() {};Advice getAdvice(); 返回aspect切面的advice部分,advice可以是Interceptor,before advice或者throws advice等,如果pointcut匹配到的话 就返回对应的advice。Default...原创 2021-10-20 15:29:24 · 141 阅读 · 0 评论 -
aopalliance-invocation-methodInterceptor-advice
org.aopalliance.intercept.Joinpoint 顶层接口表示一个运行时的连接点,For instance, an* invocation is the runtime joinpoint on a method (static joinpoint)proceed() :Proceed to the next interceptor in the chainorg.aopalliance.intercept.Invocation一个invocat...原创 2021-10-20 11:44:31 · 127 阅读 · 0 评论 -
JdkDynamicAopProxy 和 CglibAopProxy
JdkDynamicAopProxy 属性AdvisedSupport ,它是aop 代理的配置。当我们创建代理的时候会将config传递进去。JdkDynamicAopProxy 获取代理:生成jdk原生动态代理对象,同时将自己传递进去,实现了InvocationHandler的接口,@Override public Object getProxy(@Nullable ClassLoader classLoader) { if (logger.isDebugEnabled()) {...原创 2021-10-19 18:49:33 · 139 阅读 · 0 评论 -
ProxyFactory
@Test public void test(){ ProxyFactory proxyFactory = new ProxyFactory(); // 可改变target的引用 HotSwappableTargetSource targetSource = new HotSwappableTargetSource(new DemoOne("黄晓明")); proxyFactory.setTargetSource(...原创 2021-10-19 18:27:08 · 451 阅读 · 0 评论 -
spring bean生命周期和循环引用
spring 对单例的简单bean(未被代理)解决了循环引用的问题,且spring是通过set方式才能实现,构造器注入是不行的关于多级缓存的问题:https://cloud.tencent.com/developer/article/1497692首先创建原始的bean添加到缓存(此时一级缓存坑定是没有的)添加入到三级缓存,这是一个factorygetEarlyBeanReference SmartInstantiationAwareBeanPostProce...原创 2021-10-12 09:43:00 · 92 阅读 · 0 评论 -
MyAdvisor
{ return false; } } }; } @Override public MethodMatcher getMethodMatcher() { return new MethodMatcher() { .原创 2021-10-11 18:28:08 · 149 阅读 · 0 评论 -
spring redis缓存原理
spring cache启动开关 EnabelCaching @EnableAsync@SpringBootApplication(scanBasePackages={"com.lls.asset.service"},exclude={DataSourceAutoConfiguration.class,MybatisPlusConfig.class})@NacosPropertySources({@NacosPropertySource(dataId=...原创 2021-10-09 14:04:25 · 111 阅读 · 0 评论 -
@Aspectj 自动代理原理
@EnableAspectJAutoProxyorg.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator extends AspectJAwareAdvisorAutoProxyCreator extendsAbstractAdvisorAutoProxyCreator extendsAbstr...原创 2021-08-10 17:48:41 · 187 阅读 · 0 评论 -
Spring AOP APIs-Part III. Core Technologies翻译
12.Spring AOP APIs12.1 介绍12.2 spring中的Pointcut12.2.1 概念spring的pointcut模式可以使得pointcut重复使用advice类型,它可以使用相同的poincut定位到不同的advice上。org.springframework.aop.Pointcut接口是个核心的接口,用于将advices定位到特定的类和方法上。完整接口如下:public interface Pointcut { ClassF...原创 2021-08-10 16:37:18 · 86 阅读 · 0 评论 -
JDK动态代理原理
JDK 动态代理:通过Proxy类中内部类 ProxyClassFactory生成的代理对象生成包号,和自增num,每生成一个代理对象就会加 num后缀,直接生成一个字节码数组文件,然后defineClass,生成class对象newProxyInstanceJDK 动态代理: 定义接口: public interface Star{String sing(String name);String dance(S...原创 2021-08-10 16:34:00 · 59 阅读 · 0 评论 -
spring方法级别数据校验-MethodValidationPostProcessor原理
一、向容器中注入BeanMethodValidationPostProcessor@Beanpublic MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor();}二、MethodValidationPostProcessor 创建advisor,对应的是AnnotationMatchingPointcut,这个切点用来匹配Va.原创 2021-08-10 15:44:09 · 1946 阅读 · 0 评论 -
MethodInterceptor、Advice、Advisor
一个简单的例子:public class DemoMain { public static void main(String[] args) throws Exception { Student student = new Student(); AspectJProxyFactory aspectJProxyFactory = new AspectJProxyFactory(student); aspectJProxyFactory.addA原创 2021-06-29 20:24:15 · 255 阅读 · 0 评论 -
ReflectiveMethodInvocation
JointPoint 表示一个正在运行时的一个joinpoint,比如方法的一次执行MethodInvocation 描述的是an invocation to a method。他也是一个joinpoint,可以被method interceptor 拦截。ReflectiveMethodInvocation 也是表示方法的执行,通过反射的方式调动目标方法。通过反射的方式执行joinpoint即目标的方法(spring只支持方法)protected Object invokeJo...原创 2021-06-28 20:18:57 · 1192 阅读 · 0 评论 -
Cglib代理底层原理
Demo:public static void main(String[] args) throws Exception { System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "D:\\tmp"); Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(Student.class); enhanc原创 2021-06-21 15:10:13 · 130 阅读 · 0 评论 -
ClassLoader
运行时重新加载:ClassLoader.loadClassClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();Class<?> aClass = contextClassLoader.loadClass("com.lls.base.media.service.api.config.Student");Object o = aClass.newInstance();if ...原创 2021-06-09 10:55:59 · 94 阅读 · 0 评论