关于回调:Spring用于粘合JPA、JMS等框架的大多数胶水代码都是基于模板模式,比如JpaTemplate、JmsTemplate等。虽然这 些模板通过一些便捷的方法在一定程度上隐藏了底层框架的复杂性,但很多时候我们还是不可避免地要直接访问底层的实现类,如EntityManager、 JmsSession等。在这种情况下,Spring通过JpaCallback等回调类来实现我们的愿望。回调方法doIn…(..)唯一的参数就是指 向实现类的引用,比如EntityManager。下面的示例阐述了这种编程模型:
上面的代码有两点值得我们注意:首先,匿名内部回调类的实例化需要大量的样板代码。其次,还有一个限制:匿名内部类JpaCallback之外的所有参数都必须是final的。