HibernateTemplate回调

 import org.hibernate.Session;


public class MyHibernateTemplate {
	public void executeWithNativeSession(MyHibernateCallback callback) {
		Session s = null;
		try {
			s = getSession();
			s.beginTransaction();
			
			callback.doInHibernate(s);
			
			s.getTransaction().commit();
		} catch (Exception e) {
			s.getTransaction().rollback();
		} finally {
			//...
		}
	}

	private Session getSession() {
		// TODO Auto-generated method stub
		return null;
	}
	
	public void save(final Object o) {
		
		new MyHibernateTemplate().executeWithNativeSession(new MyHibernateCallback() {
			public void doInHibernate(Session s) {
				s.save(o);
				
			}
		});
	}
	
	
}
回调接口
import org.hibernate.Session;


public interface MyHibernateCallback {
	public void doInHibernate(Session s);
}


以上为模拟spring封装下的HibernateTemplate模板,当为hibernateTemplate注入sessionFactory时,调用hibernateTemplate.save(0),即可完成hibernate事务存储。

在C或者C++中回调函数的定义:  程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数)

Java中没有指针,不能传递方法的地址,一般采用接口回调实现:把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。

 实现回调的原理简介如下:  首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象。控制器对象负责检查某个场景是否出现或某个条件是否满足。当此场景出现或此条件满足时,自动调用回调对象的方法。

以上的模拟中 MyHIbernateCallback为回调函数。

另一个回调的例子:

回调接口:

package com.denghu;

public interface Callback {
	void execute();
}

测试方法:

package com.denghu;

public class TestObject {
	public static void testMethod(){
		for(int i = 0; i < 100000000; i++){
			
		}
	}
}
控制器对象:

package com.denghu;

public class Tool {
	private void testTime(Callback callback) {
		// TODO Auto-generated method stub
		long begin = System.currentTimeMillis();
		callback.execute();
		long end = System.currentTimeMillis();
		System.out.println("use time:"+(end-begin));
	}
	public static void main(String[] args) {
		Tool tool = new Tool();
		tool.testTime(
				new Callback(){
					@Override
					public void execute(){
						TestObject.testMethod();
					}
				}
		);
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值