MichaelDuan
慕工程4951446
嘉禾种嘉禾
问题已解决:
1、在生成java文件的时候,java文件路径不正确;
我写的是:
String filename = System.getProperty("user.dir")+"/com/design/proxy/$Proxy0.java";但是我的编译器正式输出路径为:
String filename = System.getProperty("user.dir")+"/target/classes/com/design/proxy/$Proxy0.java";总结:
需要确认Tomcat启动时查找class的路径是否和上面java文件的路径一致,因为编译java文件的class文件也会在此处,所以编译后的class不在Tomcat查找的位置则会报ClassNotFoundException;
笑傲独行侠
因为在代理类中,不管执行哪个方法都会调用invoke方法,所以是底层调用的,如果你有兴趣请看看源代码就明白了
黑夜_K
检查过了,问题描述有误,不存在这个问题。
weibo_用户58597749_0
同问,我也有同样的问题。而且我觉得在invoke方法中第一个参数根本没用到,是不是不合适
nanisore_0
生成的代理类负责调用事务处理器中的invoke方法
事务处理器又负责调用真实对象的业务方法
笙__笙
如果你用的JDK是1.6以上的,应该要用interface.getSimpleName()
南望山小糊涂神
看下条件值。
【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
雷钊
静态代理可以使用继承方式实现,也可以使用聚合实现; cglib 实现的动态代理都是使用继承方式实现的,jdk 的动态代理是通过实现接口实现的
Nastasia
你需要了解下反射的概念,慕课网有反射的课程;
windy_yong
再重新试了一下,两个其实都行,我之前出现不行的情况,是因为我的包名为Proxy.com.imooc.chapter3_1.XXX,然后包路径下同时有一个Proxy的类,所以可能导致了无法正确解析Proxy是一个包还是一个类,如果修改为正确的话那么两种方法都可以,
从这里可以看出我们日常命名规范的一些重要性
给出一个类似的例子:
package proxy.com.imooc.test;
/**
* Created with IntelliJ IDEA.
* @author Wind
* @version V1.0
* @Description: .
* @Date 2016/2/17 19:34
*/
public class Test {
public static void main(String[] args) {
new proxy.com.imooc.test.proxy();
}
}
class proxy {
}
报错如下:
C:\Users\Wind\IdeaProjects\DesignPatterns\src\proxy\com\imooc\test\Test.java
Error:(12, 18) java: 找不到符号
符号: 类 com
位置: 类 proxy.com.imooc.test.proxy
xhs
张家妮儿
萝卜483096
您好:
handler类中public Object invoke(Object proxy, Method method, Object[] args)...方法,我们使用“method.invoke(target);”而非使用“method.invoke(proxy);”是通过反射的机制调用目标对象的方法。视频中模拟JDk动态代理,所以讲proxy也作为入参,虽然没有使用到proxy,并不意味着JDK动态代理它没有被使用到,有兴趣可以研究一下源码内容。
Lovecanon
1、这句话的意思是通过方法的反射,得到Moveable类的某个方法;
2、根据API中的定义,Class.getSimpleName()方法是获取源代码中给出的‘底层类’简称 (Moveable)
而Class.getName();以String的形式,返回Class对象的‘实体’名称 (com.imooc.proxy.Moveable)
如饥似渴的学习IN
您好:
我们在课程中介绍到了静态代理,讲解他的不足:会使我们系统内的类的规模增大(类膨胀),并且不易维护;并且由于被代理类和代理类的功能 本质上是相同的,被代理类只是起到了中介的作用,这种代理在系统中的存在,导致系统结构比较臃肿和松散。
为了解决这个问题,所以要动态地创建Proxy:在运行状态中,需要代理的地方,动态地创建一个Proxy,用完之后,就会销毁,这样就可以避免了Proxy 角色的class在系统中冗杂的问题了。
至于视频中演示动态代理的产生(生成java文件、编译class、load到内存)是为了更好的让大家理解产生代理的过程。当然你也可以用开元框架ASM、Javassist等 动态的在内存中创建等同.class的字节码,根据相应的字节码转换为class,然后再创建实例。
如果你ini