百度网站排名优化工具如何搭建一个个人网站
2026/2/10 7:41:58 网站建设 项目流程
百度网站排名优化工具,如何搭建一个个人网站,资深的家居行业网站模板,网站怎么做优化步骤12.4号14#xff1a;01我终于整理完笔记#xff0c;理清了所有知识点。 关于spring的两大核心#xff1a;Ioc和AOP AOP的底层#xff1a;动态代理技术 为什么要有AOP#xff1f; 一般一个系统当中都会有一些系统服务#xff0c;例如#xff1a;日志、事务管理、安全等。…12.4号1401我终于整理完笔记理清了所有知识点。关于spring的两大核心Ioc和AOPAOP的底层动态代理技术为什么要有AOP一般一个系统当中都会有一些系统服务例如日志、事务管理、安全等。这些系统服务被称为交叉业务这些交叉业务几乎是通用的不管你是做银行账户转账还是删除用户数据。日志、事务管理、安全这些都是需要做的。这会产生什么问题代码的复用性差。交叉业务与核心业务书写在一起后期维护难。AOP做了什么为了让代码客户端专注于核心业务代码也方便维护从纵向的核心业务把重复的横向业务代码抽离出来形成一个独立的组件然后以横向交叉的方式应用到业务流程当中的过程被称为AOP。AOP底层的实现AOP底层是靠JDK的自带的动态代理技术和CGLIB的动态代理实现的JDK 动态代理主要用于对接口进行代理其底层通过在运行时内存中动态生成一个实现了目标接口的代理类字节码并借助 InvocationHandler 实现方法拦截。CGLIB 通过在运行时动态生成目标类的子类代理类来实现对类的代理其底层基于字节码 生成技术通过继承并重写非 final 方法以插入代理逻辑。补充即使目标类有接口你也可以强制 Spring 使用 CGLIB通过配置proxyTargetClass true。[!NOTE] 前面静态代理中不是说继承的耦合度高吗为啥CGLIB使用继承实现了动态代理它在内存中生成无关业务代码也就不存在这类问题。AOP实现的细节Spring AOP 的实现细节可以简要概括为以下几点基于代理Spring AOP 不修改字节码而是在运行时为目标 Bean 创建代理对象JDK 动态代理或 CGLIB通过代理拦截方法调用。代理选择目标类实现了接口 → 默认使用JDK 动态代理无接口或配置proxyTargetClasstrue→ 使用CGLIB 代理。织入时机在 Bean 初始化完成后由BeanPostProcessor如AnnotationAwareAspectJAutoProxyCreator判断是否需要代理并将代理对象放入 Spring 容器替换原始 Bean。通知执行方法调用时代理对象通过责任链模式依次执行各类通知Before、Around、After等最后调用目标方法通过反射。统一适配所有通知类型如MethodBeforeAdvice最终都被适配成MethodInterceptor统一在拦截链中执行。局限性只能拦截public 方法且self-invocation内部调用不会触发 AOP因为调用的是 this 而非代理对象。总结Spring AOP 动态代理 BeanPostProcessor 责任链 反射全程在运行时完成对业务代码无侵入。Spring AOP 的实现流程1.启动时扫描切面Spring 容器启动时通过EnableAspectJAutoProxy或 XML 配置注册一个特殊的BeanPostProcessorAnnotationAwareAspectJAutoProxyCreator。它会识别所有带Aspect注解的类并解析其中的Before、After、Around等通知转换成Advisor包含 Pointcut Advice。2.Bean 初始化后判断是否需要代理当每个 Bean 初始化完成后上述BeanPostProcessor的postProcessAfterInitialization()方法被调用。它检查该 Bean 的类和方法是否匹配已有的Pointcut 表达式。如果匹配就进入代理创建流程。3.选择代理方式并创建代理对象判断目标类是否有接口有接口 → 默认用JDK 动态代理生成$Proxy0类无接口 或 开启proxyTargetClasstrue→ 使用CGLIB生成Xxx$$EnhancerBySpringCGLIB$$...子类创建代理对象内部持有原始目标对象 所有匹配的 Advisor 列表。4.将代理对象放入容器这个容器就是 Spring 的 IoC 容器本身容器中保存的是代理对象而不是原始 Bean。后续所有对该 Bean 的依赖注入或获取都返回这个代理。5.调用方法时触发拦截链当调用代理对象的方法时JDK 代理 → 调用InvocationHandler.invoke()CGLIB 代理 → 调用MethodInterceptor.intercept()两者都会构建一个MethodInvocation对象内部包含目标方法、参数、通知链List。6.按顺序执行通知 目标方法调用methodInvocation.proceed()以责任链模式依次执行Before通知Around的前半部分目标方法通过反射调用Around的后半部分AfterReturning成功或AfterThrowing异常After最终通知类似 finally

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询