首页 > 编程知识 正文

aop实现方式有几种,cglib动态代理和jdk

时间:2023-05-05 21:51:33 阅读:32265 作者:1870

AOP的基础实现原理1.Aop要解决的两个核心问题1.Aop如何创建动态代理类? (动态字节码技术)2.Spring工厂如何加工和创建代理? 2 .创建动态代理类2.1 JDK的动态代理

//1创建原始对象的userserviceuserservice=newuserserviceimpl (; //2 JDK动态代理/* */invocationhandlerhandler=newinvocationhandler ()、overridepublicobjectinvoke (对象代理, 方法管理器)、方法模式对象[ ] args (throws throwable (system.out.println (----代理日志------' ); //以原始方式运行object ret=method.invoke (userservice,args ); 返回ret; }; userserviceuserserviceproxy=(userservice ) proxy.newproxyinstance ) userserviceimpl.class.getclass loader ),userseiclass userserviceproxy.register (new user ); }} 2.2 CGlib动态代理CGlib创建动态代理的原理:通过父子继承关系创建代理对象,将原始类作为父类,将代理类作为子类,在保证两者方法一致性的同时

编码package com.baizhiedu.cglib; import com.baizhiedu.proxy.User; importorg.spring framework.cglib.proxy.enhancer; importorg.spring framework.cglib.proxy.method interceptor; importorg.spring framework.cglib.proxy.method proxy; import java.lang.reflect.Method; publicclasstestcglib { publicstaticvoidmain (string [ ] args )/1原始对象userviceuserservice=newuserservice ();/* 2以cglib方式访问动态代理对象proxy.newproxyinstance (class loader,interface, 创建invocationhandler (增强器. set class loader ) (增强器) )--方法拦截器(cglib )增强器. create-- 增强器. set class loader (test cglib.class.getclass loader ) ); enhancer.set super class (userservice.getclass ) ); methodinterceptorinterceptor=new method interceptor ()//invocation handler---- invoke @ overridepublicobjectintercept methodproxymethodproxy (throws throwable (system.out.println (---- cglib log-------cglib log ) )。 object ret=method.invoke (userservice,args ); 返回ret; }; enhancer.set callback (interceptor; userserviceuserserviceproxy=(userservice ) enhancer.create (; userserviceproxy.login(suns,) 123345 ); userserviceproxy.register (new user ); }总结1. JDK动态代理继承通过Proxy.newProxyInstance ()接口创建代理的实现类2. Cglib动态代理增强器父类创建的代理类3

publicclassproxybeanpostprocessorimplementsbeanpostprocessor { @ overridepublicobjectpostprocessbeforeinitialization (对象*/publicobjectpostprocessafterinitialization (对象bean, string beanname (throwsbeansexception (invocationhandler=newinvocationhandler ) ) @Overridepublicobjectinvoke ) ) hod,object [ ] args (throws throwable (system.out.println (------ new log---' ) ); objectret=method.invoke(bean,args ); 返回ret; }; return proxy.newproxyinstance (proxybeanpostprocessor.class.getclass loader (,bean.getClass ).get接口) ) } bean id=' userservice ' class=' com.baizhi edu.factory.userserviceimpl ' /! -1.实现beanpostprocessor加工2 .在配置文件中配置beanpostprocessor-- bean id=' proxybeanpostprocessor ' class=' '

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。