现在的位置: 首页 > 综合 > 正文

HibernateTemplate回调

2018年01月11日 ⁄ 综合 ⁄ 共 1594字 ⁄ 字号 评论关闭
 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();
					}
				}
		);
	}
}

【上篇】
【下篇】

抱歉!评论已关闭.