`
simgsg
  • 浏览: 96012 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

spring系列之 回调函数的使用

 
阅读更多

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

 

  1. package com.lixuehui.callbacktest;  
  2.   
  3. public interface MySession {  
  4.  public Object createMyQuery();  
  5. }  
  6.   
  7.    
  8.   
  9. package com.lixuehui.callbacktest;  
  10.   
  11. public class MySessionImpl implements MySession{  
  12.  public Object createMyQuery(){  
  13.   return "Hello,World!";  
  14.  }  
  15. }  
  16.   
  17.    
  18.   
  19. package com.lixuehui.callbacktest;  
  20.   
  21. public interface MyHibernateCallBack {  
  22.  Object doInHibernate(MySession target);  
  23. }  
  24.   
  25.    
  26.   
  27. package com.lixuehui.callbacktest;  
  28.   
  29. abstract class MyTemplete{  
  30.  protected MySession createSession(){  
  31.   return new MySessionImpl();// 模拟创建一个session  
  32.  }  
  33.   
  34.  protected Object execute(MyHibernateCallBack callback){  
  35.   MySession mySession = createSession(); // 模拟创建一个session  
  36.   Object object = callback.doInHibernate(mySession);  
  37.   return object;  
  38.  }   
  39. }  
  40.   
  41. class TempClass implements MyHibernateCallBack {  
  42.  public Object doInHibernate(MySession session) {  
  43.   return session.createMyQuery();  
  44.  }  
  45. }  
  46.   
  47.   
  48. public class Test extends MyTemplete{  
  49.   
  50.  public static void main(String[] args) {  
  51.   Object object = new Test().execute(new MyHibernateCallBack(){  
  52.    //这处new这个接口,创建一个匿名内部类,相当于new了一个实现MyHibernateCallBack接口的类,然后再将这个匿   名对象传给execute方法。  
  53.    public Object doInHibernate(MySession session){  
  54.     return session.createMyQuery();  
  55.    }  
  56.   });  
  57.   System.out.println(object);  
  58.  }  
  59. }  
  60. //Test类相当于:  
  61. public class Test extends MyTemplete {  
  62.   
  63.  public static void main(String[] args){  
  64.   TempClass temp = new TempClass();  
  65.   Object object = new Test().execute(temp);  
  66.   System.out.println(object);  
  67.  }  
  68. }  

 
 不过这么写灵活度比较低,doInHibernate里的如果做另外的操作的话,就要重复修改TempClass的doInHibernate方法。
看到回调的好处了么?

 

我觉得这个回调的好处是:
通过创建匿名类,动态实现接口,并实现接口的方法,侧重点在于接口,不在乎实现接口的类,故采用匿名类。
如果你遇到了侧重点在于接口,而不在乎类实现的情况,就可以采取这种回调方式。

Oberser,swing的事件机制,以及java里的自定义事件机制,频繁用的都是回调. 
包括java里的main函数,也可以理解为回调 
那想想,为什么java *** 的时候就必须走main方法中呢,可见java ***的时候内部也是回调用的main,所以才跑到main方法里.main方法扔给二次开发人员,随意施展.

回调,回调,顾名思义:"你先实现吧,实现完了回头我调你".

分享到:
评论

相关推荐

    spring

    - **生命周期接口**:Spring定义了一系列的生命周期回调接口,如`InitializingBean`和`DisposableBean`,允许开发者在Bean初始化和销毁时执行特定的逻辑。 - **FactoryBean**:这是一个特殊的Bean类型,可以返回其他...

    springCloud-rabbitmq分布事物实现.zip

    在Spring Cloud与RabbitMQ结合的场景下,我们可以采用`RabbitTemplate`的`execute`方法,它提供了一个回调函数,可以在其中执行需要在消息发送前确认的一系列操作,这样就可以在一个事务中完成数据库操作和消息发送...

    spring 反编译器 spring源码

    DI通过构造函数注入、setter方法注入和接口回调等方式实现。 2. **IoC容器(Inversion of Control Container)**:Spring IoC容器是管理对象生命周期和装配的对象工厂。它通过XML配置文件或Java注解来定义对象及其...

    Spring框架系列(11) - Spring AOP实现原理详解之Cglib代理实现.doc

    Enhancer允许我们设置回调函数,这些回调函数将在代理对象的方法调用前后执行。 3. Enhancer创建一个代理类,它是目标类的子类,这个子类会覆盖目标类的所有非final方法,并在这些方法中插入额外的逻辑,也就是我们...

    Spring bean 管理

    Spring通过一系列的回调方法来管理Bean的生命周期,包括初始化和销毁时的操作。 - 通过标签的init-method和destroy-method属性指定初始化和销毁方法。 - 容器在创建Bean实例时调用初始化方法,在销毁Bean实例前...

    Spring Reference Core Technologies

    Spring还提供了一系列其他Aware接口,可以帮助Bean更好地融入Spring环境。 #### 六、Bean定义继承 通过继承Bean定义,可以复用现有的Bean配置,减少冗余代码。这种方式在配置复杂的应用时非常有用。 总结起来,...

    spring5系列 任小龙大神班

    3. **Bean的生命周期**:从Bean的创建到销毁的过程,Spring提供了丰富的回调方法,如init-method和destroy-method,用于执行自定义初始化和销毁逻辑。 #### 五、Spring AOP - **AOP(Aspect Oriented Programming...

    spring面试问答.pdf

    SpringBean的生命周期涉及一系列步骤,包括初始化前、初始化后、销毁前、销毁后的各种回调函数的执行。 在事务管理方面,Spring支持编程式事务和声明式事务两种方式。编程式事务需要程序员在代码中手动管理事务边界...

    java8-spring5部分技术与工具介绍

    Lambda 表达式可以作为参数传递,也可以作为返回值,简化了回调函数和事件处理。 2. **方法引用来替代匿名内部类**:方法引用提供了一种更简洁的方式来引用已存在的方法,而无需创建新的匿名类。 3. **Stream API*...

    Spring JdbcTemplate api

    `JdbcTemplate`负责处理资源的获取、关闭以及异常的转换,而具体的SQL执行逻辑则由回调函数或接口(如`PreparedStatementCreator`, `PreparedStatementSetter`)来实现。 #### 模板与回调模式 在`JdbcTemplate`的...

    spring core官方文档.pdf

    - Spring框架的核心特性之一就是依赖注入(Dependency Injection, DI),它通过一个称为IoC容器来管理对象之间的关系。 - IoC容器负责创建对象、装配组件以及管理它们的生命周期。 - **容器概览** - **配置元...

    Spring3.x权威开发指南

    Spring定义了一系列回调接口,用于在特定的应用程序生命周期事件中执行代码。 **2.12 命名空间** 命名空间提供了一些有用的工具Bean定义,简化了配置。 **2.13 值得重视的若干DI特性** - **2.13.1 depends-on...

    Spring 开发参考手册

    - **Bean 定义**: Bean 定义是 Spring IoC 容器中的基本单位,描述了 Bean 的配置信息,如类名、作用域、生命周期回调方法等。 - **创建方式**: - 通过构造函数创建 Bean - 通过静态工厂方法创建 Bean - 通过实例...

    Spring在应用中获得Bean的方法

    当调用`getBean()`方法时,它会触发一系列的逻辑,包括解析Bean定义、创建Bean实例、执行初始化回调等。 在`DefaultListableBeanFactory`中,`doGetBean()`方法是获取Bean的核心实现,它会检查Bean是否存在、处理...

    Spring的本质系列(1)依赖注入共3页.pdf.zip

    接口注入相对较少使用,它涉及到为接口提供实现的回调。 首先,我们来看构造器注入。当类有多个构造函数时,Spring会使用被`@Autowired`注解的构造函数。这个注解告诉Spring哪个构造函数是用来注入依赖的。例如: ...

    Spring Boot 系列教程 EasyUI edatagrid扩展

    此外,如果你需要对edatagrid进行更深度的定制,比如自定义加载提示、行样式等,可以通过设置`onLoadSuccess`、`onLoadError`等回调函数,或者使用EasyUI的扩展API来实现。 总的来说,结合Spring Boot的强大后端...

    Spring整合Hibernate 详解.doc

    通过实现这个接口,可以在执行特定数据库操作前后的回调函数中进行额外的工作,如事务控制、日志记录等。 6.5.6 使用IoC容器组装各种组件 Spring的IoC容器是其核心特性之一,它负责管理应用中的对象及其依赖关系。...

    SSH笔记-Spring JdbcTemplate

    4. **事务管理**:Spring的JdbcTemplate也整合了事务管理功能,通过`JdbcTemplate.execute()`方法的回调函数,可以在一个操作中包裹多个数据库操作,确保原子性和一致性。如果发生异常,事务会自动回滚,否则在所有...

    spring-framework.pdf

    - **核心容器改进**:增强了 IoC 容器的功能,例如增加了新的 Bean 生命周期回调方法等。 - **通用 Web 改进**:Spring 4.0 对 Web 层进行了多项改进,包括支持 WebSocket、SockJS 和 STOMP 消息传递协议。 - **测试...

Global site tag (gtag.js) - Google Analytics