内部类和回调

来源:互联网 发布:音乐裁剪合并软件 编辑:程序博客网 时间:2024/06/05 02:23

下面是spring中HibernateTemplate部分源码及测试类,看过后应该就能了解回调是怎么一回事:

public interface HibernateCallback {

   Object doInHibernate(Session session) throws HibernateException, SQLException;

}

class HibernateTemplate{

      public Object execute(HibernateCallback action) throws DataAccessException {
         return doExecute(action, false, false);
     }

     protected Object doExecute(HibernateCallback action, boolean enforceNewSession, boolean enforceNativeSession)
   throws DataAccessException {

   //·························

     Object result = action.doInHibernate(sessionToExpose);
  //························

}

public class Test extends HibernateDaoSupport {

 public void test() {
  List list = (List) this.getHibernateTemplate().execute(new HibernateCallback() {
   public Object doInHibernate(Session session)
     throws HibernateException, SQLException {
    Query q = session.createQuery("from Employee");
    List list = q.list();
    return list;
   }
  });
  }

public static void main(String[] args) {
  Resource rs = new ClassPathResource("applicationContext.xml");
  XmlBeanFactory fac = new XmlBeanFactory(rs);
  Test t = (Test) fac.getBean("testa");
  t.test();
 }
}

 

 

至于内部类,它的作用如下:

  1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。即内部类实例对包含它的

哪个类的实例来说,是特权的。

  2.对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如

何,那怕是public,除了包容类,其他类都无法使用它。

  3.匿名内部类可以很方便的定义回调。

  4.使用内部类可以非常方便的编写事件驱动程序。

 

看了上面的代码应该很容易理解这几句话的意思。

原创粉丝点击