《尚学堂_史上最易懂的设计模式视频》--章节5 动态代理-JDK6自带的编译器

所有的设计模式中最难的一个

==组合和聚合是有很大区别的
组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),
这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。 在实际写代码时组合方式一般会这样写: A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。 聚合方式则是这样: A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它 传给它的这个对象不是A类创建的。 现实生活中: 人和人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。
==随机数
random.nextInt() 为 java.util.Random类中的方法; 
Math.random() 为 java.lang.Math 类中的静态方法。
==动态代理
    

不用通过类继承的方式,会产生很多类出来,类爆炸。聚合的本质

任何实现了Moveabel接口的对象都可以被我这个代理 作为被代理对象。可以代理直接的相互组合。

静态代理:

组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),
这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。 在实际写代码时组合方式一般会这样写: A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。 聚合方式则是这样: A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它 传给它的这个对象不是A类创建的。 现实生活中: 人和人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。

 ==26课时--这节课开始有难度

AOP就是动态代理的一种方式

动态代理:根本看不到代理类的名字,内部自己生成一段代码,动态编译这段代码,生成一个代理类。

动态编译3方式;JDK6 Complier API,开源的CGLib(底层用到ASM), ASM直接生成二进制(连编译器都不用了);

 学生提到:不如写个类,动态代理是解决类太多的问题。

编译:System.getProperty("user.dir");会输出项目的根目录

后面出现一个问题,获取编译器获取不到。在Preferences中发现用了JRE环境(这个只是运行环境不包含编译环境)

==27课时

 1、添加一个新的,并且是用JDK的,而不用公用的JRE。

  2、到项目的 BuildPath中Libraries 将JRE System Libraries 删除, 添加Alternate JRE,就是第一步添加的jdk。

 

即可输出看到 编译器的类名,也可以拿到 SUN公司提供的编译器了。

如何使用:代码接着上方的截图。

利用JavaCompiler编译java文件(一个简单封装的工具类) - CSDN博客
http://blog.csdn.net/u014653197/article/details/52796006

使用JavaCompiler编译java源文件 - vDemo - 博客园
http://www.cnblogs.com/demo111/p/4518137.html

Window - Show View- Navigator 可以真实反映硬盘的情况。

ClassLoader 可以加载bin中的.class文件。需要加载其他路径用URLClassLoader

 

原文地址:https://www.cnblogs.com/rogge7/p/7744667.html