公司网站建设的需求服装网站建设案例分析
2026/4/17 23:16:01 网站建设 项目流程
公司网站建设的需求,服装网站建设案例分析,营销策划师,网站模板 首饰预定SpringAOP是基于动态代理实现的AOP代理模式#xff08;委托模式#xff09;就和中介一样#xff0c;把东西交给中介#xff0c;中介会帮你进行处理#xff0c;就是代理房东-买家房东-中介-买家代理模式内容Subject#xff1a;业务接口类#xff0c;可以是抽象类或者是接…SpringAOP是基于动态代理实现的AOP代理模式委托模式就和中介一样把东西交给中介中介会帮你进行处理就是代理房东-买家房东-中介-买家代理模式内容Subject业务接口类可以是抽象类或者是接口定义了房东要做的事情交给中介RealSubject业务实现类具体的业务执行被代理的对象房东Proxy代理类代理RealSubject中介代理模式分类静态代理在程序运行前代理类的.class文件就已经存在动态代理在程序运行的时候由反射机制动态创建静态代理详解静态代理在程序运行之前就存在代理类.class文件就好比在卖房子之前中介已经把工作做好了只需要卖出去即可代码实现定义接口房东需要做的事情2.实现接口房东出租房子代理中介帮房东出租房子使用当有顾客来的时候他会和中介进行交流这个时候中介需要用房东定义的接口干啥只需要代理核心的逻辑依旧是房东在执行假设现在不只是要出租房屋要卖掉或者是需要卖到车之类的那么每个都需要进行修改代理的流程是不变的只是和顾客进行沟通然后执行房东的逻辑所有既然流程是一样的那么我是否可以使用一个代理类来实现动态代理动态代理相对于静态代理更加灵活我们不需要为每个目标对象创建一个代理对象而是等到程序运行的时候交给JVM去实现动态创建就好比中介不需要提前预测有什么业务而是业务来了才去准备实现方式JDK动态代理CGLIB动态代理JDK动态代理代码实现代码详解定义一个类实现接口告诉JDK这个是我用来处理代理逻辑的代理的具体对象把具体的对象传入target中核心方法当调用代理对象的任何方法都会到这里执行Proxy中介method调用的方法args传参数总结当想要租房的时候会先和中介进行沟通然后帮你和房东进行沟通最后结束代理访问详解代码首先是创建真实的对象即有真正的房东可以租房然后生成动态的代理对象当你调用 proxy.rentHouse() 时并不会直接执行房东的 rentHouse() 方法。而是会先跳转到 JDKInvocationHandler 的 invoke 方法执行我们定义的增强逻辑比如 “开始代理” 和 “代理结束”再通过反射去调用房东的真实方法JAVA API详解1. InvocationHandler 接口详解proxy这是动态生成的代理对象本身就像 “中介” 自己。你一般很少直接用它。method你当前调用的那个方法比如你调用 proxy.rentHouse()这个 method 就代表 rentHouse() 方法。args调用方法时传的参数如果方法没有参数它就是 null。核心作用当你调用代理对象的任何方法时这个 invoke() 方法都会被自动触发。你可以在这里进行一些操作前置增强在调用真实方法前做一些事比如打印日志、校验权限。调用真实方法通过 method.invoke(target, args) 去执行被代理对象的方法。后置增强在真实方法执行完后再做一些事比如记录耗时、事务提交。Proxy.newProxyInstance() 方法详解loader类加载器用来加载我们动态生成的代理类。通常直接用目标对象的类加载器target.getClass().getClassLoader()。interfaces被代理对象所实现的接口数组。这是 JDK 动态代理的核心限制只能代理实现了接口的类因为动态生成的代理类会和目标类实现同一个接口。h就是我们自己写的 InvocationHandler 实现类。→ 所有代理对象的方法调用最终都会转发给这个 h 的 invoke() 方法去处理。完整逻辑你通过 Proxy.newProxyInstance() 传入三个参数工厂帮你生成一个代理对象。当你调用代理对象的方法时JDK 会自动把请求转发给 InvocationHandler 的 invoke() 方法。在 invoke() 里你可以添加任何增强逻辑再通过反射调用真实对象的方法。最后把真实方法的返回值返回给调用方。图解CGLIB动态代理JDK动态代理的最大问题就是只能掉实现了接口的类但是有时候我们需要对类进行代理所有就出现了CGLIBCGLIB 动态代理实现步骤总结定义被代理类无需实现接口直接准备一个普通的业务类作为被代理的目标类。自定义 MethodInterceptor实现该接口并重写 intercept 方法在方法中添加增强逻辑并通过 MethodProxy 调用目标对象的方法作用与 JDK 动态代理的 invoke 方法类似。创建代理对象通过 Enhancer 类的 create() 方法指定被代理类和自定义的 MethodInterceptor动态生成并返回代理对象CGLIB和JDK不一样这个是一个开源的项目需要导入依赖才可以使用具体代码实现MethodInterceptor接⼝详解实现 MethodInterceptor 接口这是 CGLIB 的核心拦截器接口所有代理增强逻辑都在 intercept 方法中实现。目标对象注入通过构造函数传入被代理的原始对象后续调用目标方法时使用。3intercept 方法增强前置增强在目标方法执行前添加自定义逻辑如打印日志、权限校验。调用目标方法通过 methodProxy.invoke 调用原始对象的方法性能优于反射调用。后置增强在目标方法执行后添加自定义逻辑如打印日志、事务提交。创建代理类,并使⽤创建目标对象RealHouseSubject 是真实的业务实现类房东实现了 HouseSubject 接口租房业务。通过 Enhancer 生成代理对象调用代理方法proxy.rentHouse() 会触发 CGLIBInterceptor 的 intercept 方法执行前置增强 → 目标方法 → 后置增强的完整流程。MethodInterceptor 接口MethodInterceptor继承自 Callback 接口是 CGLIB 定义的方法拦截器标准接口。intercept() 方法这是唯一的核心方法所有被代理的方法调用都会进入这个方法你可以在这里实现对目标方法的增强。Enhancer.create() 方法Class type你要代理的目标类的 Class 对象。CGLIB 会以这个类为父类动态生成一个子类作为代理类。Callback callback通常传入一个 MethodInterceptor 的实现类它定义了所有被拦截方法的增强逻辑。工作流程Enhancer 会动态生成目标类的子类字节码。将你传入的 MethodInterceptor 实例关联到这个子类上。当调用代理对象的任何方法时都会触发 MethodInterceptor.intercept() 方法。最终返回这个动态生成的代理对象。JDK VS CGLIBSpring AOP 代理选择spring 自动选择逻辑Spring 通过proxyTargetClass属性默认false与目标类特征决定代理方式具体规则如下Spring Boot 特殊规则2.X 及以上版本默认使用 CGLIB 代理即使目标类有接口可通过配置spring.aop.proxy-target-classfalse切换回 JDK 代理。SpirngAOP源码核心逻辑一、源码核心入口代理对象的创建流程Spring AOP 生成代理对象的核心逻辑在 AbstractAutoProxyCreator 类的createProxy() 方法中整体流程分为 3 步初始化代理工厂ProxyFactory传入目标类、切面等配置根据目标类特征和配置决定使用 JDK 还是 CGLIB 代理通过代理工厂生成最终的代理对象并返回。二、关键配置proxyTargetClass 属性这是控制代理方式的核心开关默认值为 false可通过注解或配置文件修改注解方式EnableAspectJAutoProxy(proxyTargetClass true)Spring Boot 中需注意2.X 及以上版本默认用 CGLIB此注解可能被自动配置覆盖需通过配置项修改配置文件方式spring.aop.proxy-target-classfalse切换为 JDK 代理。Spring AOP 源码通过 proxyTargetClass 配置和目标类是否有接口由 DefaultAopProxyFactory 决定代理方式 —— 默认 “有接口用 JDK无接口用 CGLIB”强制配置 proxyTargetClasstrue 则全用 CGLIB特殊情况目标是接口 / 代理类仍用 JDK。流程图

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

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

立即咨询