当前位置: 首页 > news >正文

平台网站建设ppt雪梨直播

平台网站建设ppt,雪梨直播,python在线运行,手机设计网动态代理有jdk动态代理及cglib代理#xff0c;下面描述jdk动态代理 jdk动态代理 看了 上云 老师的视频#xff0c;整理下 pom文件 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starte…动态代理有jdk动态代理及cglib代理下面描述jdk动态代理 jdk动态代理 看了 上云 老师的视频整理下 pom文件 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactId/dependency /dependencies 目标类  IStudentServiceImpl //目标执行接口 public interface IStudentService {void save();ListStudent query(); }//目标执行类实现 Service public class IStudentServiceImpl implements IStudentService {private static final Logger logger LoggerFactory.getLogger(IStudentServiceImpl.class);Overridepublic void save() {logger.info(新增功能...);}Overridepublic ListStudent query() {logger.info(查询功能...);return new ArrayList();} }增强类 TransactionService Service public class TransactionService{private static final Logger logger LoggerFactory.getLogger(TransactionService.class);public void before(){logger.info(开始事务...);}public void after(){logger.info(结束事务...);}} 代理类 public class TransactionHandler implements InvocationHandler {private Object obj; //目标对象private TransactionService transactionService; //增强方法public TransactionHandler(Object obj, TransactionService transactionService) {this.obj obj;this.transactionService transactionService;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result null;if (save.equals(method.getName())) {transactionService.before();result method.invoke(obj,args);transactionService.after();} else {result method.invoke(obj,args);}return result;} } Junit测试类 public class TestStudent {Testpublic void test(){//增强类TransactionService transactionServicenew TransactionService();//目标类对象IStudentService studentServicenew IStudentServiceImpl();//方法拦截处理器TransactionHandler transactionHandler new TransactionHandler(studentService, transactionService);//获取代理实例对象IStudentService proxyInstance (IStudentService)Proxy.newProxyInstance(IStudentServiceImpl.class.getClassLoader(), IStudentServiceImpl.class.getInterfaces(), transactionHandler);proxyInstance.save();saveProxyClass(D:\\programs\\idea\\projects\\demo1\\src\\);}private void saveProxyClass(String path){byte[] proxy1s ProxyGenerator.generateProxyClass($Proxy1, IStudentServiceImpl.class.getInterfaces());FileOutputStream outnull;try {outnew FileOutputStream(new File(path$Proxy1.class));out.write(proxy1s);} catch (Exception e) {e.printStackTrace();}finally {if(out!null){try {out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}}} } 结论 可以看到在src目录下生成一个class类[$Proxy1.class]此文件可以看到 该代理子类通过调用InvocationHandler的invoke方法实现了目标类的方法。 $Proxy1.class文件内容如下 // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //import com.example.demo.service.IStudentService; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.lang.reflect.UndeclaredThrowableException; import java.util.List;public final class $Proxy1 extends Proxy implements IStudentService {private static Method m1;private static Method m3;private static Method m4;private static Method m2;private static Method m0;public $Proxy1(InvocationHandler var1) throws {super(var1);}public final boolean equals(Object var1) throws {try {return (Boolean)super.h.invoke(this, m1, new Object[]{var1});} catch (RuntimeException | Error var3) {throw var3;} catch (Throwable var4) {throw new UndeclaredThrowableException(var4);}}public final void save() throws {try {super.h.invoke(this, m3, (Object[])null);} catch (RuntimeException | Error var2) {throw var2;} catch (Throwable var3) {throw new UndeclaredThrowableException(var3);}}public final List query() throws {try {return (List)super.h.invoke(this, m4, (Object[])null);} catch (RuntimeException | Error var2) {throw var2;} catch (Throwable var3) {throw new UndeclaredThrowableException(var3);}}public final String toString() throws {try {return (String)super.h.invoke(this, m2, (Object[])null);} catch (RuntimeException | Error var2) {throw var2;} catch (Throwable var3) {throw new UndeclaredThrowableException(var3);}}public final int hashCode() throws {try {return (Integer)super.h.invoke(this, m0, (Object[])null);} catch (RuntimeException | Error var2) {throw var2;} catch (Throwable var3) {throw new UndeclaredThrowableException(var3);}}static {try {m1 Class.forName(java.lang.Object).getMethod(equals, Class.forName(java.lang.Object));m3 Class.forName(com.example.demo.service.IStudentService).getMethod(save);m4 Class.forName(com.example.demo.service.IStudentService).getMethod(query);m2 Class.forName(java.lang.Object).getMethod(toString);m0 Class.forName(java.lang.Object).getMethod(hashCode);} catch (NoSuchMethodException var2) {throw new NoSuchMethodError(var2.getMessage());} catch (ClassNotFoundException var3) {throw new NoClassDefFoundError(var3.getMessage());}} }由此可得出结论底层实现了个Proxy的子类Proxy里面有需要实现的增强方法通过反射机制生成一个子类实现InvocationHandler接口实现动态代理。 通过代理类对象调用方法时会先调用其重写的invoke方法里面再调用原方法。 通过实现接口获取到接口的所有方法[$Proxy1.class文件实现目标IStudentService类]通过Proxy创建代理类实例[Proxy.newProxyInstance]通过反射机制获取到一个个的方法对象[$Proxy1.class类]调用invocationHandler接口的invoke方法从而实现业务的增强[TransactionHandler类文件实现InvocationHandler]
http://www.pierceye.com/news/177775/

相关文章:

  • 建设外贸类网站互联网下的网络营销
  • 网站开发需要的知识WordPress要什么环境
  • wordpress 多站点设置欧洲c2c平台
  • 赤峰网站开发公司做网站的公司怎么推销
  • 深圳福田区区住房和建设局网站wordpress 小程序开发
  • 网站建设与推cctv-10手机网站模板用什么做
  • 网站的建站方案网络科技有限公司
  • ps做图游戏下载网站有哪些内容广州网站(建设信科网络)
  • 专做皮鞋销售网站seo网站优化方案
  • 街区网站建设的意义做外贸网站 怎么收钱
  • 北京网站制作公司兴田德润可信赖给钱做h事都行的网站名
  • 合肥珍岛公司做网站推广怎么样如何查询网站备案进度
  • 源码论坛网站门户网站的含义
  • 零食店网站构建策划报告高级程序员培训
  • 重庆大足网站制作公司百度app智能小程序
  • flash网站与html5discuz做的网站上传到网站空间的文件
  • 做网站会什么网页设计类型与风格
  • 怎么做网站用于推广注册公司每年需要缴纳什么费用
  • 揭阳有哪家网站制作公司wordpress数据库备份恢复
  • 站长工具友链查询中国网站建设公司图片
  • 做原型的素材网站国内wordpress主题商
  • 合肥的电商网站设计wordpress 相册 链接
  • 试玩平台网站怎么做网站建设推荐中企动力
  • 衡水做网站建设台州网站建设选浙江华企
  • 某集团网站建设规划书用flash做的经典网站
  • 企业网站用什么做一个空间怎么放两个网站吗
  • 58同城长沙回收网站建设长春seo推广
  • 景区网站建设的意义女生学计算机应用技术可以做什么
  • 做律师网站的公司天津公司网站制作
  • 上海建设摩托车官方网站招聘网站数建设