我们都从spring学到了什么?
1,回调方法的使用
spring使用了大量的回调函数,如HibernateCallBack,打开你的eclipse,ctrl+shift+t,再输入*CallBack,你可以看到有多少地方在使用回调函数,下面分析一下大牛们为什么频繁使用这个CallBack函数。
废话少说,先来个例子说事儿。
package com.lixuehui.callbacktest;

public interface MySession ...{
public Object createMyQuery();
}

package com.lixuehui.callbacktest;

public class MySessionImpl implements MySession ...{
public Object createMyQuery() ...{
return "Hello,World!";
}
}

package com.lixuehui.callbacktest;

public interface MyHibernateCallBack ...{
Object doInHibernate(MySession target);
}

package com.lixuehui.callbacktest;

abstract class MyTemplete...{
protected MySession createSession() ...{
return new MySessionImpl();// 模拟创建一个session
}

protected Object execute(MyHibernateCallBack callback) ...{
MySession mySession = createSession(); // 模拟创建一个session
Object object = callback.doInHibernate(mySession);
return object;
}
}

class TempClass implements MyHibernateCallBack ...{
public Object doInHibernate(MySession session) ...{
return session.createMyQuery();
}
}


public class Test extends MyTemplete...{

public static void main(String[] args) ...{
Object object = new Test().execute(new MyHibernateCallBack() ...{
//这处new这个接口,创建一个匿名内部类,相当于new了一个实现MyHibernateCallBack接口的类,然后再将这个匿 名对象传给execute方法。
public Object doInHibernate(MySession session) ...{
return session.createMyQuery();
}
});
System.out.println(object);
}
}
Test类相当于:
public class Test extends MyTemplete ...{

public static void main(String[] args) ...{
TempClass temp = new TempClass();
Object object = new Test().execute(temp);
System.out.println(object);
}
}

不过这么写灵活度比较低,doInHibernate里的如果做另外的操作的话,就要重复修改TempClass的doInHibernate方法。
看到回调的好处了么?
我觉得这个回调的好处是:
通过创建匿名类,动态实现接口,并实现接口的方法,侧重点在于接口,不在乎实现接口的类,故采用匿名类。
如果你遇到了侧重点在于接口,而不在乎类实现的情况,就可以采取这种回调方式。
Oberser,swing的事件机制,以及java里的自定义事件机制,频繁用的都是回调.
包括java里的main函数,也可以理解为回调
那想想,为什么java *** 的时候就必须走main方法中呢,可见java ***的时候内部也是回调用的main,所以才跑到main方法里.main方法扔给二次开发人员,随意施展.
回调,回调,顾名思义:"你先实现吧,实现完了回头我调你". 呵 呵
本文转自我的javaeye博客: http://lixuehui.javaeye.com/blog/70487
若转载请注名出处 谢谢
待续 ...