2018/01/23 16:04

引用来自“somhu”的评论

可以转载么?

回复@somhu : 当然可以
2015/11/16 13:45

引用来自“开源狂人”的评论

你的例子口味真重。。。
2015/07/07 11:27
写的不错
2015/05/10 23:18

引用来自“钻天鹞子”的评论

(现在流行叫“注入”了,我觉得叫“射入”也不错哦!构造函数初始化叫“正着射”,所以 reflect 方式就叫“反着射”,简称“反射”) 不愧是"黄"老湿 啊13
还好,不是“老尸”
2015/04/29 19:15
楼主居然只是个“小弟”!
2014/06/02 16:00
写的挺风趣的 通俗易懂 赞一下。
2014/05/16 14:19

引用来自“jianxia84”的评论

只能点一个赞啊,我tm想赞你100次怎么办?
哈哈!可以每篇博文都点一遍
2014/03/15 19:38

引用来自“_Cloud”的评论

楼主非常搞笑,不错不错!!加油!我会多来看的。

好久没有写《Java 那点事儿》了,后面有时间继续给大家分享,也希望得到各位的帮助,大家共同进步。
2014/01/21 11:03
楼主分享知识 还带着幽默 哈哈 容易看懂
2013/11/04 17:05

引用来自“丶深蓝”的评论

楼主,我照着你的例子写了,但是报了错误:java.lang.StackOverflowError,打印了无数个Before。。,这是为什么捏

检查一下你的 import 是不是有问题,用到了不同包中的同名的类。比如:Method
2013/10/18 10:08

引用来自“黄勇”的评论

引用来自“唐阳”的评论

如果在类设计的初期就提供良好的回调,是不是意味着就不需要马后炮的代理了?

有些时候要让代码写得优雅,适当地使用代理是一种不错的选择,可将非业务功能放在代理中,如:日志、权限等功能。

学习了,本人初学者,看了您老人家的博客后受益匪浅
2013/10/18 09:46

引用来自“唐阳”的评论

如果在类设计的初期就提供良好的回调,是不是意味着就不需要马后炮的代理了?

有些时候要让代码写得优雅,适当地使用代理是一种不错的选择,可将非业务功能放在代理中,如:日志、权限等功能。
2013/10/18 08:53
如果在类设计的初期就提供良好的回调,是不是意味着就不需要马后炮的代理了?
2013/09/27 22:08

引用来自“mn_1127”的评论

楼主诙谐幽默的写作style 将复杂的问题讲的通俗易懂,值得赞一个!

楼主后面那个单例的实现是不是有点草率,在多线程环境中应该无法保证是单例。记得以前用过过一个用静态内部类实现的单例模式,大概如下:
public class Singleton {
/**
* 类级的内部类,该内部类的实例与外部类的实例没有绑定关系,
* 而且只有被调用到才会装载,从而实现了延迟加载
*/
private static class SingletonHolder{
/**
* 静态初始化器,由JVM来保证线程安全
*/
private static Singleton instance = new Singleton();
}
/**
* 私有化构造方法
*/
private Singleton(){
}

public static Singleton getInstance(){
return SingletonHolder.instance;
}
}

没错!可以使用“静态内部类”方式实现单例模式,更加安全!静态成员仅被 JVM 加载一次,可以确保实例的唯一性。
2013/09/25 16:31

引用来自“高甜甜”的评论

"在 DynamicProxy 类中,我定义了一个 Object 类型的 target 变量,它就是被代理的目标对象,通过构造函数来初始化(现在流行叫“注入”了,我觉得叫“射入”也不错哦!构造函数初始化叫“正着射”,所以 reflect 方式就叫“反着射”,简称“反射”)。"

笑尿了....

以后要出一本书,叫做《勇哥戏说模式》,勇哥看后大手一摆,我觉得“射”就很形象嘛,就叫《勇哥戏射设计模式》!
2013/09/11 23:35
风趣,简单易懂,不错,学习了,希望勇哥多多分享*^_^*
2013/09/10 23:20

引用来自“老夫”的评论

动态和cglib的方式都能实现aop。楼主能不能 再向我们介绍一下,运用自定义类加载器的方式实现aop。好像这种方式是效率比较高,而且不仅仅限于对方法级别的代理。

JBoss AOP 就是基于 ClassLoader 的,抽空给大家分享一下。
2013/09/10 23:19

引用来自“junsun”的评论

cglib对final 类是不行的吧

回答正确!final 类是不能有子类的,而 CGLib 动态代理恰恰是要去生成这个子类,所以 CGLib 无法对 final 类进行动态代理,运行时会报错。此外,对于 final 方法是无效的,此时不会报错。
2013/09/09 08:58
阅读起来很轻松,很容易理解。
文笔比较吊,口味有点重。
哈哈,期待下一篇。
2013/09/08 23:19
犀利,以后常来看你的文章。
2013/09/08 23:18

引用来自“klaus_”的评论

public class CGLibProxy implements MethodInterceptor {

public Opublic <T> T getProxy(Class<T> cls) {
        return (T) Enhancer.create(cls, this);
    }

public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
before();
Object result = proxy.invokeSuper(obj, args);
after();
return result;
}

...
}

楼主这里的getProxy()方法的返回值 Opublic 是不是多复制了? 应该是<T> T 就可以了哈。

现已纠正,非常感谢!我只能说,都是文本编辑器惹的祸。
2013/09/08 21:33

引用来自“一路找北”的评论

一直没搞明白proxy和delegate有什么区别

proxy,英文是“代理”;delegate 英文是“委托”。A 代理 B,反过来就是,B 委托 A。
2013/09/08 17:47

引用来自“开源狂人”的评论

你的例子口味真重。。。

口味重才能记得住啊,哈哈!
2013/09/08 16:46
你的例子口味真重。。。
2013/09/08 08:19

引用来自“屁屁果”的评论

隔离级别是事务的原生属性,不用考虑太多。传播特性就需要aop拦截方法标注其特性,拦截时判断。跨数据源需要事务管理器,意味着当前操作线程有多个数据库的连接,根据拦截路径判断使用哪个

非常好的经验,感谢分享!也正是我下一步打算做的事情。
2013/09/08 07:52
隔离级别是事务的原生属性,不用考虑太多。传播特性就需要aop拦截方法标注其特性,拦截时判断。跨数据源需要事务管理器,意味着当前操作线程有多个数据库的连接,根据拦截路径判断使用哪个
2013/09/08 00:22
嗯,这篇文章写的很好,jdk默认的静态代理就是接口的代理,所以必须有接口。cglib是针对类的,本质是继承了你的目标类,作为其子类进行方法调用的。spring抽象了jdk和cglib的动态代理,可以无缝切换,但也造就一个坑,同一个bean的方法互相调用,只会入口的aoo生效,不过,这个也可以避免……
2013/09/07 23:13
博主的文笔相当精彩。超赞
回复 @
{{emojiItem.symbol}}
返回顶部
顶部