可以转载么?
楼主非常搞笑,不错不错!!加油!我会多来看的。
楼主,我照着你的例子写了,但是报了错误:java.lang.StackOverflowError,打印了无数个Before。。,这是为什么捏
如果在类设计的初期就提供良好的回调,是不是意味着就不需要马后炮的代理了?
楼主诙谐幽默的写作style 将复杂的问题讲的通俗易懂,值得赞一个!楼主后面那个单例的实现是不是有点草率,在多线程环境中应该无法保证是单例。记得以前用过过一个用静态内部类实现的单例模式,大概如下:public class Singleton { /** * 类级的内部类,该内部类的实例与外部类的实例没有绑定关系, * 而且只有被调用到才会装载,从而实现了延迟加载 */ private static class SingletonHolder{ /** * 静态初始化器,由JVM来保证线程安全 */ private static Singleton instance = new Singleton(); } /** * 私有化构造方法 */ private Singleton(){ } public static Singleton getInstance(){ return SingletonHolder.instance; } }
"在 DynamicProxy 类中,我定义了一个 Object 类型的 target 变量,它就是被代理的目标对象,通过构造函数来初始化(现在流行叫“注入”了,我觉得叫“射入”也不错哦!构造函数初始化叫“正着射”,所以 reflect 方式就叫“反着射”,简称“反射”)。"笑尿了....
动态和cglib的方式都能实现aop。楼主能不能 再向我们介绍一下,运用自定义类加载器的方式实现aop。好像这种方式是效率比较高,而且不仅仅限于对方法级别的代理。
cglib对final 类是不行的吧
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 就可以了哈。
一直没搞明白proxy和delegate有什么区别
你的例子口味真重。。。
隔离级别是事务的原生属性,不用考虑太多。传播特性就需要aop拦截方法标注其特性,拦截时判断。跨数据源需要事务管理器,意味着当前操作线程有多个数据库的连接,根据拦截路径判断使用哪个
评论删除后,数据将无法恢复
引用来自“somhu”的评论
可以转载么?
引用来自“开源狂人”的评论
你的例子口味真重。。。引用来自“钻天鹞子”的评论
(现在流行叫“注入”了,我觉得叫“射入”也不错哦!构造函数初始化叫“正着射”,所以 reflect 方式就叫“反着射”,简称“反射”) 不愧是"黄"老湿 啊引用来自“jianxia84”的评论
只能点一个赞啊,我tm想赞你100次怎么办?引用来自“_Cloud”的评论
楼主非常搞笑,不错不错!!加油!我会多来看的。
引用来自“丶深蓝”的评论
楼主,我照着你的例子写了,但是报了错误:java.lang.StackOverflowError,打印了无数个Before。。,这是为什么捏
引用来自“黄勇”的评论
引用来自“唐阳”的评论
如果在类设计的初期就提供良好的回调,是不是意味着就不需要马后炮的代理了?
引用来自“唐阳”的评论
如果在类设计的初期就提供良好的回调,是不是意味着就不需要马后炮的代理了?
引用来自“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;
}
}
引用来自“高甜甜”的评论
"在 DynamicProxy 类中,我定义了一个 Object 类型的 target 变量,它就是被代理的目标对象,通过构造函数来初始化(现在流行叫“注入”了,我觉得叫“射入”也不错哦!构造函数初始化叫“正着射”,所以 reflect 方式就叫“反着射”,简称“反射”)。"
笑尿了....
引用来自“老夫”的评论
动态和cglib的方式都能实现aop。楼主能不能 再向我们介绍一下,运用自定义类加载器的方式实现aop。好像这种方式是效率比较高,而且不仅仅限于对方法级别的代理。
引用来自“junsun”的评论
cglib对final 类是不行的吧
文笔比较吊,口味有点重。
哈哈,期待下一篇。
引用来自“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 就可以了哈。
引用来自“一路找北”的评论
一直没搞明白proxy和delegate有什么区别
引用来自“开源狂人”的评论
你的例子口味真重。。。
引用来自“屁屁果”的评论
隔离级别是事务的原生属性,不用考虑太多。传播特性就需要aop拦截方法标注其特性,拦截时判断。跨数据源需要事务管理器,意味着当前操作线程有多个数据库的连接,根据拦截路径判断使用哪个